← Kaikki työkalut

JSON-YAML-muunnin

Muunna JSON YAML-muotoon ja YAML JSON-muotoon heti selaimessasi. Täysin paikallinen ja yksityinen, mukana huomiot kommenteista, tyypeistä ja sisennyksistä.

Muunna JSON YAML:ksi ja YAML JSON:ksi selaimessasi

JSON ja YAML kuvaavat samanlaista dataa — sisäkkäisiä karttoja, listoja, merkkijonoja, lukuja ja totuusarvoja — mutta ne näyttävät hyvin erilaisilta ja niitä käytetään eri paikoissa. Jos vietät aikaa rajapintojen, konttitiedostojen tai CI-putkien parissa, joudut lopulta muuttamaan toisen toiseksi. Tämä sivu tekee muunnoksen molempiin suuntiin, kokonaan selaimessasi, joten liittämäsi data ei koskaan poistu koneeltasi.

Abstrakteja valon aaltosulkeita muuntumassa siisteiksi sisennetyiksi konfigurointikerroksiksi tummansinistä taustaa vasten
JSON-rakenne avautumassa sisennykseen perustuvaksi YAML:ksi.

Mikä JSON on ja missä se elää

JSON (JavaScript Object Notation) on tiukka, sulkeisiin ja kaarisulkeisiin perustuva muoto, joka on rakennettu ensisijaisesti koneita varten. Jokainen objekti on kääritty {}-merkkeihin, jokainen taulukko []-merkkeihin, avaimet ja merkkijonoarvot ovat lainausmerkeissä, ja kohteet erotetaan pilkuilla. Se on REST- ja GraphQL-rajapintojen oletusarvoinen siirtomuoto, useimpien webhookien runko, NoSQL-dokumenttien muoto ja se, mitä fetch-kutsusi palauttaa. Lähes jokainen kieli jäsentää sen suoraan pakkauksesta, minkä vuoksi se voitti rajapintakerroksen: JSON.parse JavaScriptissä, json Pythonin standardikirjastossa ja vastineet kaikkialla muuallakin. Kompromissi on se, että JSON on sanallista kirjoittaa käsin ja kieltää kommentit, joten se on huono muoto tiedostolle, jota ihminen muokkaa koko päivän.

Mikä YAML on ja missä se elää

YAML (YAML Ain't Markup Language) suunniteltiin päinvastaista prioriteettia varten: ihmiset ensin. Se hylkää sulkeet ja lainausmerkit, käyttää sisennystä ilmaisemaan sisäkkäisyyttä, ja antaa sinun kirjoittaa kommentteja #-merkillä. Tuo luettavuus on syy siihen, miksi siitä tuli konfiguroinnin yhteinen kieli. Docker Compose -tiedostot, Kubernetes-manifestit, GitHub Actions- ja GitLab CI -työnkulut, Ansible-soittolistat ja lukemattomat sovellusten konfigurointitiedostot ovat kaikki YAML:ia. Tyypillinen YAML-dokumentti on huomattavasti lyhyempi kuin vastaava JSON ja paljon helpompi vertailla pull requestissa. Tuon eleganssin hintana on hauraus, mikä on siinä, missä muuntaminen käy mielenkiintoiseksi.

Keskeiset erot, joilla on merkitystä

Kolme eroa ohjaa lähes jokaista muunnospäätöstä. Ensinnäkin, tyhjätila on merkityksellistä YAML:ssa eikä merkitse mitään JSON:ssa. YAML käyttää välilyöntejä — ei koskaan sarkaimia — rakenteen ilmaisemiseen, joten yksittäinen väärin kohdistettu välilyönti voi hiljaisesti muuttaa dokumentin merkitystä. JSON ei välitä sisennyksestä lainkaan. Toiseksi, YAML tukee kommentteja eikä JSON tue. Mikä tahansa #-kommentti YAML:ssa yksinkertaisesti katoaa, kun tuotat JSON:ia, koska sille ei ole paikkaa. Kolmanneksi, YAML:lla on rikkaampi, implisiittinen tyypitys. Se lukee mielellään päivämääriä, aikaleimoja ja null-arvon useassa kirjoitusasussa, ja se arvaa tyypit lainaamattomista arvoista. JSON:lla on pieni, eksplisiittinen tyyppijoukko eikä epäselvyyttä. Huomaa myös, että JSON on teknisesti YAML 1.2:n osajoukko, minkä vuoksi kelvollinen JSON yleensä jäsentyy puhtaasti YAML:ksi, mutta päinvastaista ei taata.

Sisäkkäinen datapuu muuntumassa kahden hehkuvan rakenteisen muodon välillä syaanina ja kultaisena
Sama datapuu ilmaistuna kahtena muotona.

Muunnosansat, joita kannattaa varoa

Edestakainen muunnos ei ole aina häviötöntä, ja kannattaa tietää, mistä asiat rikkoutuvat:

  • Norja-ongelma. YAML 1.1 -sääntöjen mukaan lainaamaton NO jäsentyy totuusarvoksi false, ja yes, on ja off muuttuvat myös totuusarvoiksi. Maakoodi tai kytkinmerkintä voi kääntyä true/false-arvoksi ennen kuin huomaat sitä. Lainaa arvot, jotka tarkoitat merkkijonoiksi.
  • Lukujen pakotus. Versio kuten 3.10 voi menettää loppunollansa ja muuttua muotoon 3.1, ja 1.0:sta tulee luku, vaikka halusit tekstin. Lainaa versiomerkkijonot ja tunnisteet.
  • Ankkurit ja aliakset katoavat. YAML:n &ankkuri- ja *alias-viitteillä ei ole JSON-vastinetta. Hyvä muunnin laajentaa ne täydeksi arvokseen, joten data on oikein, mutta päällekkäisyyksien poisto on poissa — JSON YAML:ksi JSON:ksi ei rakenna alkuperäisiä ankkureita uudelleen.
  • Kommentit ja lohkoskalaarit. Kommentit pudotetaan siirryttäessä JSON:iin. Monirivisiä lohkoskalaareja (| ja >) romahtaa tavallisiksi JSON-merkkijonoiksi \n-koodeilla, joten visuaalisen muotoilun tarkoitus katoaa.
  • Sisennys palattaessa YAML:iin. JSON ei koodaa sisennystä, joten muunnin valitsee johdonmukaisen tyylin. Tarkista se ennen liittämistä sarkainherkkään työkaluun.

Miksi vain paikallisella on väliä

Konfigurointitiedostot ja rajapintahyötykuormat ovat juuri sellaisia asioita, joita ei pitäisi ladata satunnaiselle palvelimelle: ne kantavat usein isäntänimiä, tunnuksia, sisäisiä palvelunimiä tai asiakastietoja. Tämä muunnin ajaa jäsennys- ja tuotantovaiheen selaimessasi JavaScriptillä. Mitään ei lähetetä taustajärjestelmään, mitään ei kirjata lokiin, ja työkalu toimii offline-tilassa sivun latautumisen jälkeen. Liitä Kubernetes-salaisuus tai CI-työnkulku luottavaisin mielin siitä, että se pysyy koneellasi.

Tarvitsetko liittyviä työkaluja? Selaa koko datamuuntimiemme valikoimaa, siisti sotkuinen syöte JSON-muotoilijalla, ja palaa tänne aina kun tarvitset liikkua rajapintamaailman ja konfigurointimaailman välillä.

Usein kysytyt kysymykset

Ladataanko dataani jonnekin?

Ei. Muunnos tapahtuu kokonaan selaimessasi paikallisella JavaScriptillä. JSON:iasi tai YAML:iasi ei koskaan lähetetä palvelimelle, joten salaisuudet ja konfigurointitiedostot pysyvät yksityisinä.

Miksi YAML-arvoni true tai false muuttui odottamatta?

YAML 1.1 käsittelee lainaamattomia sanoja kuten yes, no, on ja off totuusarvoina — Norja-ongelma. Kääri mikä tahansa arvo, jonka tarkoitat merkkijonoksi, lainausmerkkeihin, jotta se säilyy tekstinä muunnoksessa.

Mitä kommenteilleni tapahtuu, kun muunnan YAML:n JSON:ksi?

JSON:ssa ei ole kommenttisyntaksia, joten kaikki risuaita-kommentit poistetaan muunnoksen aikana. Jos sinun täytyy säilyttää muistiinpanot, pidä auktoritatiivinen kopiosi YAML:ssa.

Säilyvätkö YAML-ankkurit ja -aliakset?

Ne laajennetaan täysiksi arvoikseen, koska JSON:ssa ei ole viitemekanismia. Data pysyy oikeana, mutta päällekkäisyyksien poistoa ei voi palauttaa, kun muunnat takaisin YAML:ksi.

Voinko muuntaa JSON:in YAML:ksi yhtä hyvin kuin YAML:n JSON:ksi?

Kyllä, työkalu toimii molempiin suuntiin. Liitä JSON saadaksesi YAML:n, tai liitä YAML saadaksesi JSON:in, ja muunnin tunnistaa ja tuottaa toisen muodon.

Miksi YAML rikkoutuu, kun käytän sarkaimia?

YAML vaatii välilyöntejä sisennykseen ja hylkää sarkaimet. Jos liitos ei jäsenny, korvaa sarkainmerkit välilyönneillä ja pidä sisennys johdonmukaisena.