JSON vs YAML: erinevused ja kasutusjuhud
JSON ja YAML on kaks kõige levinumat tekstiseeria vormingut enim kasutatud struktureeritud andmete kirjeldamiseks: rakenduse konfiguratsioon, API kasulik koormus, infrastruktuuri failid, Kubernetese manifestid, CI/CD torujuhtmed. Mõlemad esindavad sama põhistruktuurid (objektid, loendid, skalaarid), kuid erineva filosoofiaga: JSON soosib masinloetavust ja universaalsust, YAML keskendub inimese loetavusele ja lakoonilisus. Selles artiklis võrreldakse kahte vormingut punktide kaupa, et aidata teil valida.
Mis on JSON?
JSON (JavaScript Object Notation) on serialiseerimisvorming, mille tutvustas Douglas Crockford tuletas 2000. aastate alguses JavaScripti objekti sõnasõnalise süntaksi. Standarditud RFC 8259 ja ECMA-404 järgi, on tänapäeval veebi keskne formaat: peaaegu kõik REST API-d, NoSQL-i andmebaasid ja Frontendi konfiguratsioonid kasutavad seda.
JSON põhineb kahel struktuuril:
- Võtme-väärtuste paaride järjestatud kogum (objekt, mis on suletud sulgudes)
- Väärtuste järjestatud loend (massiiv nurksulgudes)
Skalaarväärtused on string, arv, true,
false või null. Stringid peavad olema ümbritsetud jutumärkidega.
kahekohalised. JSON ei toeta kommentaare.
Mis on YAML?
YAML (YAML Ain't Markup Language) on 2001. aastal ilmunud vorming, mis on loodud algusest peale olema inimesele loetav. Praegune spetsifikatsioon on YAML 1.2.2. Selle eristav omadus: see kasutab taande väljendamiseks hierarhia, nagu Python.
YAML on JSON-i superkomplekt alates versioonist 1.2: iga kehtiv JSON-dokument on dokument
Kehtiv YAML. Kuid YAML annab palju juurde: kommentaarid, jutumärkideta stringid, mitmerealised, ankrud
ja varjunimed, sildid selgesõnaliseks tippimiseks, mitu dokumenti samas failis
(---).
Võrdlev süntaks
Siin on mõlemas vormingus väljendatud sama struktuur.
JSON
kood>{
"nimi": "cdrn",
"version": "1.14",
"sildid": ["seo", "tööriistad", "avatud lähtekoodiga"],
"autor": {
"nimi": "Adrien",
"e-post": "contact@example.com"
},
"aktiivne": tõsi,
"tähed": null
}
YAML
# Projekti konfiguratsioon
nimi: cdrn
versioon: "1.14"
sildid:
- seo
- tööriistad
- avatud lähtekoodiga
autor:
nimi: Adrien
email: contact@example.com
aktiivne: tõsi
tähed: null
Samal sisul hõivab YAML ligikaudu sama arvu ridu, kuid väldib sulgusid,
sulud, lõpus olevad komad ja jutumärgid enamikul stringidel. Kommentaarid (read
#) on lubatud.
Toetatud tüübid
JSON teab 6 tüüpi: objekt, massiiv, string,
arv, tõveväärtus, null. Emakeelset kuupäeva, kahendkoodi pole,
puudub selge täisarvu / ujuki eristus.
YAML 1.2 teab sama mis JSON ja lisab: ISO 8601 ajatemplid, binaarne (base64 kodeeringu kaudu
silt !!binaarne), erinevad täisarvud ja ujukid, lõpmatus, NaN ja kohandatud tüübid
siltide kaudu (!!str, !!int, !!float...). YAML 1.1 aktsepteeritud
jah/ei/sees/väljas tõeväärtusena: klassikaline lõks vanade parseritega.
Jõudlus ja ökosüsteem
JSON-i sõelumine on tavaliselt 3–10 korda kiirem kui YAML ja selle sõelujad on kõikjal saadaval (integreeritud peaaegu kõigi keelte käituskeskkonda). raamatukogud YAML on raskem, kuna nad haldavad rikkalikumat grammatikat (ankrud, sildid, multi-doc).
Ökosüsteemi poolelt: JSON domineerib HTTP API-de, NoSQL-i andmebaaside (MongoDB, CouchDB), failide üle
package.json, composer.json, tsconfig.json. YAML on end sisse seadnud
rakenduse konfigureerimiseks ja infrastruktuuri koodina: Symfony, Spring Boot, Rails,
Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Võrdlustabel
| Kriteerium | JSON | YAML |
|---|---|---|
| Inimese loetavus | Hea | Suurepärane |
| Masinloetavus | Suurepärane | Õige |
| Kommentaarid | Ei | Jah (#) |
| Märkimisväärne taane | Ei | Jah |
| Parsimise kiirus | Kiire | Aeglasem |
| Rikkalikud tüübid (kuupäev, binaarne) | Ei | Jah |
| Ankrud/alias | Ei | Jah |
| Tüüpilised kasutusjuhud | API, salvestus, andmevahetus | konfiguratsioon, infra-koodina |
Tüüpilised kasutusjuhud
Valige JSON millal
- Olete kujundamas REST API või veebihaagi lõpp-punkti
- Te salvestate andmed NoSQL-i andmebaasi või vahemällu
- Vahetate andmeid esi- ja taustaprogrammi vahel
- Parsimise jõudlus on kriitiline (suur läbilaskevõime, serv)
- Soovite universaalselt toetatud vormingut ilma sõltuvusteta
Valige YAML millal
- Kirjutate käsitsi muudetud rakenduse konfiguratsiooni
- Vajate valikute dokumenteerimiseks tagasisidet
- Te kirjutate Kubernetes, Docker Compose, GitHub Actions, Ansible
- Soovite määrata plokid ankrute ja varjunimedega
- Loetavus on ülimuslik töötlemiskiirusest
Soovitus
Lihtne reegel: JSON masina jaoks, YAML inimese jaoks. Kui teie fail on mida toodab või tarbib programm, võtke JSON. Kui see on kirjutatud ja käsitsi korrigeeritud, võtke YAML. Paljud ökosüsteemid aktsepteerivad mõlemat: Symfony loeb oma konfiguratsioonide jaoks YAML-i, JSON-i ja XML-i, Kubernetes aktsepteerib mõlemat oma manifestatsioonina. Kui kahtlete, avage YAML Inimese konfiguratsioon ja JSON automatiseeritud voogude jaoks.
Meie abil saate testida ühest vormingust teise teisendamist JSON-/YAML-muundur ja vormindage dokument kiiresti rakendusega JSON-vormingus.
Korduma kippuvad küsimused
Kas YAML on aeglasem kui JSON?
Jah, reeglina maksab YAML-dokumendi sõelumine mitu korda rohkem protsessorit kui dokumendi sõelumine sama JSON-dokument, kuna YAML-i grammatika on rikkalikum (taande, sildid, ankrud). sisse praktiline, konfiguratsioonifailide puhul on erinevus tühine. Tundlikuks muutub see, kui sõelute ikka ja jälle kümneid tuhandeid dokumente.
Kas saame YAMLi automaatselt JSON-iks teisendada?
Jah: kui väldite YAML-i tüüpe, saab iga YAML-dokumendi ilma kadudeta teisendada JSON-i konkreetsed (ajatemplid, ankrud). Vastupidine on veelgi lihtsam, JSON on alamhulk alates YAML 1.2. Meie muundur käib mõlemat pidi.
Kas JSON aktsepteerib kommentaare?
Ei, JSON-standard keelab need. Dialektid on olemas (JSON5, JSONC), kuid mitte universaalselt toetatud. Kui vajate kommentaare, võtke YAML või TOML.
Miks kasutab Kubernetes YAML-i, mitte JSON-i?
Kubernetese manifestid kirjutavad ja vaatavad läbi inimesed. YAML pakub kommentaare, a vähem mürarikas süntaks ja ankrute kaudu faktooringu võimalus. Kubernetes API aktsepteerib ka JSON, kuid idiomaatiline kasutus jääb YAML-iks.
Kas YAML on tõesti JSON-i superkomplekt?
Jah, kuna YAML 1.2: iga kehtiv JSON-dokument on kehtiv YAML-dokument. See võimaldab JSON-i manustamiseks YAML-faili ilma seda muutmata, mis on plokkide puhul otstarbekas loodud või kopeeritud ja kleebitud.