JSON proti YAML: razlike in primeri uporabe
JSON in YAML sta dve najpogostejši obliki besedilne serializacije ki se najpogosteje uporablja za opisovanje strukturiranih podatkov: konfiguracija aplikacije, obremenitev API-ja, infrastrukturne datoteke, manifesti Kubernetes, cevovodi CI/CD. Oba predstavljata isto temeljne strukture (objekti, seznami, skalarji), vendar z različnimi filozofijami: JSON daje prednost strojni berljivosti in univerzalnosti, YAML se osredotoča na človeško berljivost in jedrnatost. Ta članek primerja obe obliki od točke do točke, da vam pomaga pri izbiri.
Kaj je JSON?
JSON (JavaScript Object Notation) je format serializacije, ki ga je predstavil Douglas Crockford je v zgodnjih 2000-ih izpeljal sintakso objektnega dobeseda JavaScript. Standardiziran z RFC 8259 in ECMA-404, je danes osrednji format spleta: skoraj vsi API-ji REST, baze podatkov NoSQL in Uporabljajo ga konfiguracije frontenda.
JSON temelji na dveh strukturah:
- Urejena zbirka parov ključ-vrednost (objekt, v zavitih oklepajih)
- Urejen seznam vrednosti (matrika, v oglatih oklepajih)
Skalarne vrednosti so niz, število, true,
false ali null. Nizi morajo biti obdani z narekovaji.
dvojne. JSON ne podpira komentarjev.
Kaj je YAML?
YAML (YAML Ain't Markup Language) je format, ki se je pojavil leta 2001 in je bil zasnovan od samega začetka da bi jih človek lahko bral. Trenutna specifikacija je YAML 1.2.2. Njegova posebna značilnost: uporablja zamik za izražanje hierarhijo, kot je Python.
YAML je nadmnožica JSON od različice 1.2 dalje: vsak veljaven dokument JSON je dokument
Veljaven YAML. Toda YAML doda veliko: komentarje, nize brez narekovajev, več vrstic, sidra
in vzdevki, oznake za izrecno tipkanje, več dokumentov v isti datoteki
(---).
Primerjalna sintaksa
Tu je ista struktura, izražena v obeh formatih.
JSON
{
"ime": "cdrn",
"različica": "1.14",
"oznake": ["seo", "orodja", "odprtokodni"],
"avtor": {
"ime": "Adrien",
"email": "contact@example.com"
},
"aktivno": res,
"zvezde": nič
}
YAML
# Konfiguracija projekta
ime: cdrn
različica: "1.14"
oznake:
- SEO
-orodja
- odprtokodni
avtor:
ime: Adrien
e-pošta: contact@example.com
aktivno: res
zvezdice: nič
Pri isti vsebini YAML zaseda približno enako število vrstic, vendar se izogiba oklepajem,
oklepaji, končne vejice in narekovaji na večini nizov. Komentarji (vrstice
#) so dovoljeni.
Podprte vrste
JSON pozna 6 vrst: object, array, string,
number, boolean, null. Brez izvirnega datuma, brez binarnega zapisa,
ni eksplicitnega razlikovanja celo število/float.
YAML 1.2 pozna isto kot JSON in dodaja: časovne žige ISO 8601, binarno (base64 kodirano prek
oznaka !!binary), različna cela števila in lebdeča števila, neskončnost, NaN in vrste po meri
prek oznak (!!str, !!int, !!float...). YAML 1.1 sprejet
yes/no/on/off kot logične vrednosti: klasična past s starimi razčlenjevalniki.
Zmogljivost in ekosistem
JSON je običajno 3- do 10-krat hitrejši za razčlenjevanje kot YAML in njegovi razčlenjevalci so na voljo povsod (vgrajeni v izvajalni čas skoraj vseh jezikov). Knjižnice YAML so težji, ker upravljajo z bogatejšo slovnico (sidra, oznake, več dokumentov).
Na strani ekosistema: JSON prevladuje nad API-ji HTTP, bazami podatkov NoSQL (MongoDB, CouchDB), datotekami
package.json, composer.json, tsconfig.json. YAML se je uveljavil
za konfiguracijo aplikacije in infrastrukturo kot kodo: Symfony, Spring Boot, Rails,
Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Primerjalna tabela
| Merilo | JSON | YAML |
|---|---|---|
| Človeška berljivost | Dobro | Odlično |
| Strojna berljivost | Odlično | Pravilno |
| Komentarji | Ne | Da (#) |
| Pomembna vdolbina | Ne | Da |
| Hitrost razčlenjevanja | Hitro | Počasneje |
| Obogatene vrste (datum, binarno) | Ne | Da |
| Sidra / vzdevek | Ne | Da |
| Tipični primeri uporabe | API, shranjevanje, izmenjava podatkov | Konfiguracija, infra-as-code |
Tipični primeri uporabe
Izberite JSON, ko
- Načrtujete API REST ali končno točko webhook
- Podatke shranjujete v bazo podatkov NoSQL ali predpomnilnik
- Izmenjujete podatke med sprednjim in zadnjim delom
- Zmogljivost razčlenjevanja je kritična (visoka prepustnost, rob)
- Želite univerzalno podprto obliko brez odvisnosti
Izberite YAML, ko
- Napišete ročno urejeno konfiguracijo aplikacije
- Za dokumentiranje možnosti potrebujete povratne informacije
- Pišete Kubernetes, Docker Compose, GitHub Actions, Ansible
- Bloke želite faktorizirati s sidri in vzdevki
- Berljivost ima prednost pred hitrostjo obdelave
Priporočilo
Preprosto pravilo: JSON za stroj, YAML za človeka. Če je vaša datoteka ki jih proizvede ali uporabi program, vzemite JSON. Če je napisano in lektorirano ročno, vzemite YAML. Mnogi ekosistemi sprejemajo oboje: Symfony bere YAML, JSON in XML za svoje konfiguracije, Kubernetes za svoje manifeste sprejema oboje. Če ste v dvomih, pojdite na YAML za Človeška konfiguracija in JSON za avtomatizirane tokove.
Pretvorbo iz ene oblike v drugo lahko preizkusite z našim Pretvornik JSON/YAML in hitro formatirajte dokument z oblikovalnik JSON.
Pogosta vprašanja
Ali je YAML počasnejši od JSON?
Da, kot splošno pravilo, razčlenjevanje dokumenta YAML stane nekajkrat več CPE kot razčlenjevanje isti dokument JSON, ker je slovnica YAML bogatejša (zamiki, oznake, sidra). notri praktično je razlika pri konfiguracijskih datotekah zanemarljiva. Občutljivo postane, ko vedno znova razčlenjujete na desettisoče dokumentov.
Ali lahko samodejno pretvorimo YAML v JSON?
Da: kateri koli dokument YAML je mogoče pretvoriti v JSON brez izgube, če se izognete vrstam YAML specifični (časovni žigi, sidra). Obratno je še enostavneje, saj je JSON podnabor iz YAML 1.2. Naš pretvornik gre v obe smeri.
Ali JSON sprejema komentarje?
Ne, standard JSON jih prepoveduje. Narečja obstajajo (JSON5, JSONC), vendar ne univerzalno podprt. Če potrebujete komentarje, vzemite YAML ali TOML.
Zakaj Kubernetes uporablja YAML in ne JSON?
Manifeste Kubernetes napišejo in pregledajo ljudje. YAML ponuja komentarje, a manj hrupna sintaksa in možnost faktoringa preko sider. Kubernetes API sprejema tudi JSON, vendar idiomatska uporaba ostaja YAML.
Ali je YAML res nadnabor JSON?
Da od YAML 1.2: vsak veljaven dokument JSON je veljaven dokument YAML. To omogoča za vdelavo JSON v datoteko YAML, ne da bi jo spreminjali, kar je praktično za bloke ustvarjen ali kopiran in prilepljen.