Muunna JSON:n ja YAML:n välillä

muuntaa JSON:n YAML:iin (ja päinvastoin) säilyttäen rakenteen, konfiguroitavalla sisennyksellä. Käytännöllinen konfiguraation siirtoon .json- ja .yaml-tiedostojen välillä

Mihin tämä JSON/YAML-muunnin on tarkoitettu?

Tämä työkalu muuntaa YAML-asiakirjan JSONiksi ja päinvastoin säilyttäen tietorakenteen (objektit, taulukot, skalaarityypit). JSONin muuntaminen YAML:ksi tai YAML:n muuntaminen JSONiksi on yleinen kehitysvaihe: luomme OpenAPI YAML-tiedoston JSON-määrityksestä, muunnamme REST API:n lähdön YAML:ksi, jotta se tallennetaan määritysvarastoon, käännetään Kubernetes YAML-luettelo JSON-kieleksi ja välitetään se tiedostoon kubectl --clientalign

YAML vs JSON: Head-to-Head vertailu

JSON ja YAML vastaavat samankaltaisiin tarpeisiin, mutta erilaisiin käyttötapauksiin. Seuraavassa taulukossa on yhteenveto tärkeimmistä teknisistä eroista, joista on hyötyä valittaessa näiden kahden välillä kontekstin mukaan.

kautta
Ehto JSON YAML
Ihmisen luettavuus Keskiarvo (aulut, lainausmerkit kauttaaltaan) Vahva (sisennys, vähän välimerkkejä)
Paljonsanaisuus Sanasanaisempi Suppeampi
Kommentit Ei tuettu Tuettu (# kommentti)
Useita asiakirjoja yhdessä tiedostossa Ei Kyllä, erottimen ---
Ankkurit ja aliakset (uudelleenkäyttö) Ei Kyllä (&ankkuri ja *ankkuri)
Tyyppijärjestelmä Tiukka (merkkijono, numero, bool, nolla, taulukko, objekti) Epäsuora pakottaminen (kyllä, ei, nolla, päivämäärät, tulkitut skalaarit)
Jäsennysteho Erittäin nopeat alkuperäiset jäsentimet kaikkialla Hitampi, paljon laajempi kielioppi
REST-sovellusliittymien käyttöönotto De facto standardi Harvinainen
Määrityksen hyväksyminen Harvinainen (paitsi package.json, tsconfig.json) De facto standardi (Kubernetes, CI/CD, Ansible)

Milloin käyttää JSONia?

JSON on välttämätön, kun ohjelma keskustelee toisen ohjelman kanssa. Sen tyypilliset käyttötapaukset:

  • REST- ja GraphQL-rajapinnat: pyyntö- ja vastauskuormat.
  • Tiedonvaihto mikropalveluiden ja viestijonojen välillä.
  • Natiivi JavaScript-koodi: JSON.parse ja JSON.stringify ilman riippuvuuksia.
  • Selaimen puolen tallennus: localStorage, sessionStorage, IndexedDB.
  • AJAX- ja fetch-pyynnöt.
  • Binaariset tai virtaussuuntautuneet variantit: BSON (MongoDB), JSON Lines (lokit, ML-datasetit), MessagePack.
  • JS / TS -työkalujen konfigurointi: package.json, tsconfig.json, composer.json.

Milloin käyttää YAMLia?

YAML on välttämätön, kun ihminen muokkaa tiedostoa säännöllisesti. Sen tyypilliset käyttötapaukset:

  • Docker Compose (docker-compose.yml) ja pinoprofiilit.
  • Kubernetes-manifestit (Deployment, Service, Ingress, Helm-kaaviot).
  • Ansible-pelikirjat ja inventaariot.
  • CI/CD-putket: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
  • OpenAPI / Swagger- ja AsyncAPI-määritykset.
  • Annotoitu sovelluskonfiguraatio (Symfony, Spring Boot, Rails), jossa kommentit ovat hyödyllisiä.
  • Usein käsin muokattavat tiedostot, joissa ytimekkyys ja luettavuus ovat jäsennysnopeutta tärkeämpiä.

Yleisimmät sudenkuopat YAMLissa

YAML on sallivampi kuin JSON, mikä tekee siitä tehokkaan mutta salakavalan muodon. Yleisimmät sudenkuopat:

  • Sisennys : määrittely kieltää sarkainten (tab) käytön, vain välilyönnit ovat sallittuja. Näiden sekoittaminen tai välilyöntien määrän muuttaminen samassa lohkossa rikkoo jäsennyksen.
  • Skalaarien automaattinen pakotus : yes, no, on, off, true, false, null, None, ~ jäsennellään totuusarvoiksi (boolean) tai nulliksi. Esimerkkiansat: lainausmerkitön postinumero 01234 muuttuu kokonaisluvuksi 1234, ja maan nimi NO (Norja) muuttuu arvoksi false. Käytä aina lainausmerkkejä epäselvissä merkkijonoissa.
  • Moniriviset merkkijonot : | (block literal) säilyttää rivinvaihdot sellaisinaan, kun taas > (folded) korvaa rivinvaihdot välilyönneillä. Chomping-indikaattorit - ja + säätelevät viimeisen rivinvaihdon käyttäytymistä.
  • YAML 1.1 vs 1.2 : versio 1.1 (edelleen hyvin yleinen, esimerkiksi PyYAML:n oletusarvona) käsittelee arvoja yes/no/on/off totuusarvoina, minkä versio 1.2 poisti. Käyttäytyminen poikkeaa myös 8-kantaisissa luvuissa.
  • Implisiittiset päivämäärät : 2024-01-15 ilman lainausmerkkejä on joidenkin jäsentimien mielestä päivämääräobjekti, ei merkkijono.

Esimerkkejä rinnakkain

Sama dokumentti JSON- ja YAML-muodossa. Sovelluksen yksinkertainen konfiguraatio riippuvuuksineen ja ympäristöineen:

JSON-versio

{
    "name": "cdrn-app",
    "version": "1.14.2",
    "environment": "production",
    "dependencies": {
        "php": "^8.3",
        "symfony/framework-bundle": "^7.0",
        "doctrine/orm": "^3.0"
    },
    "features": ["cache", "mailer", "queue"],
    "debug": false
}

Vastaava YAML-versio

# Sovelluksen konfiguraatio
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
    php: '^8.3'
    symfony/framework-bundle: '^7.0'
    doctrine/orm: '^3.0'
features:
    - cache
    - mailer
    - queue
debug: false

YAML-versio on noin 25 % lyhyempi merkkimäärältään, sallii kommentin alussa ja on luettavissa ominaisuusluettelona ilman syntaksikohinaa.

Miten muunninta käytetään

Vaiheet tietojen muuntamiseksi:

  1. Liitä lähdedokumenttisi (JSON tai YAML) syötekenttään.
  2. Valitse haluamasi muunnan suunta (JSON:sta YAML:iksi tai YAML:ista JSON:iksi).
  3. Napsauta muunnospainiketta: muotoiltu tulos ilmestyy tulosalueelle.
  4. Tarkista tulos ja käytä kopiointipainiketta kopioidaksesi tuloksen leikepöydälle.

Muunnos suoritetaan paikallisesti selaimessasi tai erillisen palvelinreitin kautta työkalusta riippuen: arkaluonteisia tietoja ei tallenneta.

Usein kysytyt kysymykset

JSON vai YAML konfigurointitiedostoilleni?

Jos ekosysteemi edellyttää tiettyä muotoa (Kubernetes YAML, package.json JSON), noudata sovittua käytäntöä. Muussa tapauksessa suosi YAMLia pitkiin ja annotoituihin konfiguraatioihin, joita muokkaat käsin, ja JSONia ohjelman luomiin tai koodin kuluttamiin konfiguraatioihin. Hyödyllisten kommenttien mahdollisuus on usein ratkaiseva peruste YAML:n puolesta.

Miten säilyttää kommentit muunnoksessa YAML -> JSON -> YAML?

Se ei ole mahdollista. JSON ei tue kommentteja: heti kun YAML muunnetaan JSONiksi, kommentit katoavat lopullisesti. Säilyttääksesi kommentit ohjelmallisessa muokkauksessa käytä muotoilun säilyttävää jäsennintä, kuten Pythonin ruamel.yaml-kirjastoa round-trip-tilassa, tai vältä JSON-muunnosta kokonaan.

Miksi YAML-tiedostoni jäsentyy oikein paikallisesti, mutta epäonnistuu tuotannossa?

Yleisiä syitä: eri jäsenninversiot (YAML 1.1 vs 1.2), editorin lisäämät sarkaimet, lainausmerkitömät arvot, jotka näyttävät totuusarvoilta (NO, off) tai numeroilta (01234), tiedoston koodaus (huonosti hallittu UTF-8 BOM). Käytä aina lainausmerkkejä epäselvissä merkkijonoissa ja lukitse jäsentimen versio projektissasi.

Onko JSON YAML:n osajoukko?

YAML 1.2 -versiosta lähtien kyllä käytännössä: jokainen kelvollinen JSON-dokumentti on kelvollinen YAML 1.2 -dokumentti. Päinvastainen ei pidä paikkaansa: YAML-dokumenttia, joka käyttää kommentteja, ankkureita, implisiittisiä päivämääriä tai useita dokumentteja yhdessä tiedostossa, ei voida ilmaista suoraan JSONina ilman tietojen menetystä.

Mitä vaihtoehtoja JSONille ja YAMLille tulisi tuntea?

TOML : suosittu konfiguroinnissa (Cargo, pyproject.toml), hyvä kompromissi luettavuuden ja eksplisiittisen tyypityksen välillä. INI : erittäin yksinkertainen, mutta siinä ei ole standardia sisäkkäistä rakennetta. XML : sanavalmis, mutta edelleen merkityksellinen SOAP:lle ja tietyille vanhoille Java-konfiguraatioille. HCL : Terraformissa käytetty. JSON5 ja JSONC : JSON-laajennuksia, jotka sallivat kommentit ja loppupilkut.

Mikä on YAML:n paino verrattuna JSONiin?

Vastaavalla rakenteella YAML on yleensä 15–30 % lyhyempi tavuina, koska avainten ja useimpien merkkijonojen ympäriltä puuttuvat lainausmerkit ja aaltosulkeet. Verkkoliikenteessä (HTTP) minimoitu JSON on vertailukelpoinen, mutta YAML pysyy tiiviimpänä luettavana versiona. Puhtaassa jäsennystehokkuudessa JSON on useita kertoja nopeampi, mikä oikeuttaa sen käytön vilkkaassa rajapintaliikenteessä.

Pyyntöesimerkki

curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"json":"...","space_tabulation":1}'

Syöteskeema

Kenttä Tyyppi Pakollinen Oletus
json text
space_tabulation integer

Päätepisteet

  • GET https://cdrn.fr/api/v1/tools - listaa kaikki saatavilla olevat työkalut
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - hakee tämän työkalun skeeman
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - suorittaa tämän työkalun JSON-payloadilla