Pretvoriti med JSON in YAML
- Nadzorna plošča
- Dokumentacija
- API
Čemu je ta pretvornik JSON / YAML?
To orodje pretvori dokument YAML v JSON in obratno, pri čemer ohrani strukturo podatkov (objekti, tabele, skalarni tipi). Pretvorba JSON v YAML ali YAML v JSON je pogosta operacija v razvoju: ustvarimo datoteko OpenAPI YAML iz specifikacije JSON, pretvorimo izhod API-ja REST v YAML, da ga prenesemo v repozitorij konfiguracije, prevedemo manifest Kubernetes YAML v JSON, da ga posredujemo kubectl --dry-run=client -o json, ali poravnamo Dejanja poteka dela GitHub s shemo JSON. V širšem smislu je most med svetom izmenjave podatkov (JSON) in svetom ročno urejane konfiguracije (YAML).
YAML proti JSON: Primerjava med prvimi
JSON in YAML obravnavata podobne potrebe, vendar različne primere uporabe. Naslednja tabela povzema glavne tehnične razlike, uporabne za izbiro med obema glede na kontekst.
| Merilo | JSON | YAML |
|---|---|---|
| Človeška berljivost | Povprečje (oklepaji, narekovaji vseskozi) | Močna (zamik, majhna ločila) |
| Natančnost | Bolj besedno | Bolj jedrnato |
| Komentarji | Ni podprto | Podprto (# komentar) |
| Več dokumentov v eni datoteki | Ne | Da, prek ločila --- |
| Sidra in vzdevki (ponovna uporaba) | Ne | Da (&anchor in *anchor) |
| Vnesite sistem | Strogo (niz, število, bool, nič, niz, predmet) | Implicitno prisiljevanje (da, ne, null, datumi, interpretirani skalarji) |
| Zmogljivost razčlenjevanja | Zelo hitri, izvorni razčlenjevalniki povsod | Počasnejša, veliko širša slovnica |
| Prevzem API-jev REST | De facto standard | Redko |
| Prevzem za konfiguracijo | Redki (razen package.json, tsconfig.json) |
Dejanski standard (Kubernetes, CI/CD, Ansible) |
Kdaj uporabiti JSON?
JSON je potreben vedno, ko se program pogovarja z drugim programom. Njegovi tipični primeri uporabe:
- API-ji REST in GraphQL: obremenitve zahtev in odgovorov.
- Izmenjava podatkov med mikro storitvami in čakalnimi vrstami sporočil.
- Izvorna koda JavaScript:
JSON.parseinJSON.stringifybrez odvisnosti. - Shramba na strani brskalnika:
localStorage,sessionStorage, IndexedDB. - Zahteve AJAX in
fetch. - Binarne ali pretočno usmerjene različice: BSON (MongoDB), JSON Lines (dnevniki, nabori podatkov ML), MessagePack.
- Konfiguracija orodij JS/TS:
package.json,tsconfig.json,composer.json.
Kdaj uporabiti YAML?
YAML je potreben takoj, ko oseba redno ureja datoteko. Njegovi tipični primeri uporabe:
- Docker Compose (
docker-compose.yml) in profili zlaganja. - Manifesti Kubernetes (razmestitev, storitev, vhod, diagrami Helm).
- Ansible Playbooks in popisi.
- Cevi CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- Specifikacije OpenAPI/Swagger in AsyncAPI.
- Konfiguracija aplikacije z opombami (Symfony, Spring Boot, Rails), kjer so komentarji uporabni.
- Datoteke, ki se pogosto urejajo ročno, kjer imata jedrnatost in berljivost prednost pred hitrostjo razčlenjevanja.
Pogoste pasti v YAML
YAML je bolj permisiven kot JSON, zaradi česar je močan, a zahrbten format. Najpogostejše pasti:
- Zamik: specifikacija prepoveduje zavihke, veljavni so le presledki. Mešanje obeh ali spreminjanje števila presledkov v istem bloku prekine razčlenjevanje.
- Samodejno skalarno prisiljevanje:
da,ne,on,off,true,false,null,None,~so razčlenjeni kot logične ali ničelne vrednosti. Primer pasti: poštna številka01234brez narekovajev postane celo število1234in ime državeNO(Norveška) postanefalse. Dvoumne nize vedno postavite v narekovaje. - Večvrstični nizi:
|(blokovni literal) ohrani prelome vrstic takšne, kot so, medtem ko>(prepognjen) zamenja prelome vrstic s presledki. Zastavici žvečenja-in+prilagodita vedenje pri zadnjem skoku. - YAML 1.1 proti 1.2: 1.1 (še vedno zelo pogost, na primer prek PyYAML privzeto) obravnava
yes/no/on/offkot logične vrednosti, ki jih je 1.2 odstranil. Vedenja se razlikujejo tudi glede na številke z bazo 8. - Implicitni datumi:
2024-01-15brez narekovajev nekateri razčlenjevalniki razlagajo kot datumski objekt in ne kot niz.
Vzporedni primeri
Isti dokument, izražen v JSON in nato v YAML. Preprosta konfiguracija aplikacije z njenimi odvisnostmi in okoljem:
Različica JSON
{
"ime": "cdrn-aplikacija",
"različica": "1.14.2",
"okolje": "proizvodnja",
"odvisnosti": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": napačno
}
Enakovredna različica YAML
# Konfiguracija aplikacije
ime: cdrn-app
različica: 1.14.2
okolje: proizvodnja
odvisnosti:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doktrina/orm: '^3.0'
lastnosti:
- predpomnilnik
- poštar
- rep
debug: false
Različica YAML je približno 25 % krajša v znakih, sprejema vodilni komentar in se bere kot seznam lastnosti brez sintaktičnega šuma.
Kako uporabljati pretvornik
Koraki za pretvorbo podatkov:
- Prilepite izvorni dokument (JSON ali YAML) v polje za vnos.
- Izberite želeno smer pretvorbe (JSON v YAML ali YAML v JSON).
- Kliknite gumb za pretvorbo: oblikovani rezultat se prikaže v izhodnem območju.
- Preverite upodabljanje in nato uporabite gumb za kopiranje, da pridobite rezultat v odložišče.
Pretvorba se izvede lokalno v vašem brskalniku ali prek namenske strežniške poti, odvisno od orodja: občutljivi podatki se ne ohranijo.
Pogosta vprašanja
JSON ali YAML za moje konfiguracijske datoteke?
Če ekosistem zahteva obliko (Kubernetes v YAML, package.json v JSON), upoštevajte konvencijo. V nasprotnem primeru dajte prednost YAML za dolge konfiguracije z opombami, ki jih urejate ročno, in JSON za konfiguracije, ki jih ustvari program ali uporabi koda. Prisotnost uporabnih komentarjev je pogosto odločilni argument v prid YAML.
Kako obdržati komentarje med povratnim potovanjem YAML v JSON v YAML?
Ne moreš. JSON ne podpira komentarjev: takoj ko pretvorite YAML v JSON, se komentarji trajno izgubijo. Če želite ohraniti komentarje med programskim urejanjem, uporabite razčlenjevalnik, ki ohranja oblikovanje, kot je ruamel.yaml v Pythonu v povratnem načinu, ali pa se popolnoma izognite uporabi JSON.
Zakaj moja datoteka YAML pravilno razčlenjuje lokalno, vendar ne uspe v produkciji?
Pogosti vzroki: različne različice razčlenjevalnika (YAML 1.1 proti 1.2), zavihki, ki jih je uvedel urejevalnik, vrednosti brez narekovajev, ki so videti kot logične vrednosti (NO, off) ali številke (01234), kodiranje datoteke (UTF-8 BOM je slabo obdelan). Sistematično navajajte dvoumne nize in nastavite različico razčlenjevalnika v svojem projektu.
Ali je JSON podnabor YAML?
Od YAML 1.2, v praksi da: vsak veljaven dokument JSON je veljaven dokument YAML 1.2. Nasprotno je napačno: dokumenta YAML, ki uporablja komentarje, sidra, implicitne datume ali več dokumentov v datoteki, ni mogoče izraziti neposredno v JSON brez izgube informacij.
Katere alternative za JSON in YAML morate poznati?
TOML: priljubljeno za konfiguracijo (Cargo, pyproject.toml), dober kompromis med berljivostjo in eksplicitnim tipkanjem. INI: zelo preprosto, vendar brez standardne ugnezdene strukture. XML: podrobno, vendar še vedno pomembno za SOAP in nekatere podedovane konfiguracije Jave. HCL: uporablja ga Terraform. JSON5 in JSONC: razširitvi JSON, ki omogočata komentarje in vejice na koncu.
Kakšna je teža YAML v primerjavi z JSON?
Za enakovredno strukturo je YAML običajno 15 do 30 % krajši v bajtih, zahvaljujoč odsotnosti narekovajev okoli ključev in večine nizov ter odsotnosti oklepajev. Na žici (prenos HTTP) ostaja minificirani JSON primerljiv, vendar ostaja YAML bolj kompakten v berljivi različici. Za čisto zmogljivost na strani razčlenjevanja je JSON nekajkrat hitrejši, kar upravičuje njegovo uporabo za API-je z velikim prometom.
Primer zahteve
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Vhodna shema
| Polje | Tip | Obvezno | Privzeto |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Končne točke
GET https://cdrn.fr/api/v1/tools- izpiše vsa razpoložljiva orodjaGET https://cdrn.fr/api/v1/tools/json-yaml-converter- pridobi shemo tega orodjaPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- izvede to orodje s JSON payloadom