Muunna JSON:n ja YAML:n välillä
- Hallintapaneeli
- Dokumentaatio
- API
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.
| 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 --- | kautta
| 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.parsejaJSON.stringifyilman 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 postinumero01234muuttuu kokonaisluvuksi1234, ja maan nimiNO(Norja) muuttuu arvoksifalse. 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/offtotuusarvoina, minkä versio 1.2 poisti. Käyttäytyminen poikkeaa myös 8-kantaisissa luvuissa. - Implisiittiset päivämäärät :
2024-01-15ilman 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:
- Liitä lähdedokumenttisi (JSON tai YAML) syötekenttään.
- Valitse haluamasi muunnan suunta (JSON:sta YAML:iksi tai YAML:ista JSON:iksi).
- Napsauta muunnospainiketta: muotoiltu tulos ilmestyy tulosalueelle.
- 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ökalutGET https://cdrn.fr/api/v1/tools/json-yaml-converter- hakee tämän työkalun skeemanPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- suorittaa tämän työkalun JSON-payloadilla