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 berljivostDobroOdlično
Strojna berljivostOdličnoPravilno
KomentarjiNeDa (#)
Pomembna vdolbinaNeDa
Hitrost razčlenjevanjaHitroPočasneje
Obogatene vrste (datum, binarno)NeDa
Sidra / vzdevekNeDa
Tipični primeri uporabeAPI, shranjevanje, izmenjava podatkovKonfiguracija, 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.