JSON vs YAML: atšķirības un lietošanas gadījumi

JSON un YAML ir divi visizplatītākie teksta serializācijas formāti. visbiežāk izmanto, lai aprakstītu strukturētus datus: lietojumprogrammas konfigurāciju, API lietderīgo slodzi, infrastruktūras faili, Kubernetes manifesti, CI/CD konveijeri. Abi pārstāv vienu un to pašu pamatstruktūras (objekti, saraksti, skalāri), bet ar atšķirīgām filozofijām: JSON atbalsta mašīnlasāmību un universālumu, YAML koncentrējas uz lasāmību cilvēkiem un lakonisms. Šajā rakstā abi formāti tiek salīdzināti pa punktam, lai palīdzētu jums izvēlēties.

Kas ir JSON?

JSON (JavaScript Object Notation) ir serializācijas formāts, ko ieviesa Duglass Krokfords 2000. gadu sākumā atvasināja JavaScript objekta burtisko sintaksi. Tas ir standartizēts ar RFC 8259 un ECMA-404. šodien ir galvenais tīmekļa formāts: gandrīz visas REST API, NoSQL datu bāzes un Priekšgala konfigurācijas to izmanto.

JSON pamatā ir divas struktūras:

  • Sakārtota atslēgu-vērtību pāru kolekcija (objekts, kas ietverts cirtainās iekavās)
  • Sakārtots vērtību saraksts (masīvs kvadrātiekavās)

Skalārās vērtības ir virkne, skaitlis, true, false vai null. Stīgas jāiekļauj pēdiņās. dubultspēlēs. JSON neatbalsta komentārus.

Kas ir YAML?

YAML (YAML nav iezīmēšanas valoda) ir formāts, kas parādījās 2001. gadā un ir izstrādāts no paša sākuma. lai tas būtu lasāms cilvēkam. Pašreizējā specifikācija ir YAML 1.2.2. Tā atšķirīgā iezīme: tā izmanto atkāpi, lai izteiktu hierarhija, piemēram, Python.

YAML ir JSON superkopa kopš versijas 1.2: jebkurš derīgs JSON dokuments ir dokuments Derīgs YAML. Bet YAML pievieno daudz: komentāri, necitētas virknes, vairākas rindiņas, enkuri un pseidonīmi, tagi skaidrai rakstīšanai, vairāki dokumenti vienā failā (---).

Salīdzinošā sintakse

Šeit ir viena un tā pati struktūra, kas izteikta abos formātos.

JSON

{
  "name": "cdrn",
  "versija": "1.14",
  "tags": ["seo", "rīki", "atvērtais kods"],
  "autors": {
    "name": "Adrien",
    "e-pasts": "contact@example.com"
  },
  "aktīvs": patiess,
  "zvaigznes": null
}

YAML

# Projekta konfigurācija
nosaukums: cdrn
versija: "1.14"
tagi:
  - SEO
  - instrumenti
  - atvērtā koda
autors:
  vārds: Adrien
  e-pasts: contact@example.com
aktīvs: patiess
zvaigznes: null

Tajā pašā saturā YAML aizņem aptuveni tādu pašu rindu skaitu, bet izvairās no lencēm, iekavas, beigu komatus un pēdiņas lielākajā daļā virkņu. Komentāri (rindas #) ir atļauti.

Atbalstītie veidi

JSON zina 6 veidus: objekts, masīvs, virkne, skaitlis, būla, nulle. Nav dzimtā datuma, nav bināra, nav skaidras vesela skaitļa/pludiņa atšķirības.

YAML 1.2 zina to pašu, ko JSON un pievieno: ISO 8601 laikspiedoli, bināri (base64 kodēti, izmantojot tags !!binārs), atšķirīgi veseli skaitļi un pludiņi, bezgalība, NaN un pielāgotie veidi izmantojot tagus (!!str, !!int, !!float...). YAML 1.1 pieņemts jā/nē/ieslēgts/izslēgts kā Būla vērtības: klasisks slazds ar veciem parsētājiem.

Veiktspēja un ekosistēma

JSON parasti ir 3 līdz 10 reizes ātrāk parsējams nekā YAML un tā parsētāji. ir pieejami visur (integrēti gandrīz visu valodu izpildlaikā). Bibliotēkas YAML ir smagāki, jo tie pārvalda bagātāku gramatiku (enkuri, tagi, vairāku dokumentu).

No ekosistēmas puses: JSON dominē HTTP API, NoSQL datu bāzēs (MongoDB, CouchDB), failos package.json, composer.json, tsconfig.json. YAML ir sevi pierādījis lietojumprogrammu konfigurācijai un infrastruktūrai kā kodam: Symfony, Spring Boot, Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.

Salīdzināšanas tabula

Kritērijs JSON YAML
Lasāmība cilvēkiemLabaLieliski
MašīnlasāmībaLieliskiPareizi
KomentāriJā (#)
Būtisks ievilkums
Parsēšanas ātrumsĀtriLēnāk
Bagātināti veidi (datums, bināri)
Enkuri/alias
Tipiski lietošanas gadījumiAPI, krātuve, datu apmaiņaKonfigurācija, infrastruktūra kā kods

Tipiski lietošanas gadījumi

Izvēlieties JSON, kad

  • Jūs veidojat REST API vai tīmekļa aizķeres galapunktu
  • Jūs glabājat datus NoSQL datu bāzē vai kešatmiņā
  • Jūs apmaināties ar datiem starp priekšgalu un aizmugursistēmu
  • Parsēšanas veiktspēja ir kritiska (liela caurlaidspēja, mala)
  • Jūs vēlaties universāli atbalstītu formātu bez atkarībām

Izvēlieties YAML kad

  • Jūs rakstāt manuāli rediģētu lietojumprogrammas konfigurāciju
  • Lai dokumentētu opcijas, ir nepieciešamas atsauksmes
  • Jūs rakstāt Kubernetes, Docker Compose, GitHub Actions, Ansible
  • Jūs vēlaties faktorēt blokus ar enkuriem un aizstājvārdiem
  • Lasāmība ir svarīgāka par apstrādes ātrumu

Ieteikums

Vienkāršs noteikums: JSON — mašīnai, YAML — cilvēkam. Ja jūsu fails ir ko ražo vai patērē programma, izmantojiet JSON. Ja tas ir uzrakstīts un labots ar roku, ņemiet YAML. Daudzas ekosistēmas pieņem abus: Symfony nolasa YAML, JSON un XML savām konfigurācijām, Kubernetes pieņem abus par saviem manifestiem. Ja rodas šaubas, dodieties uz YAML Cilvēka konfigurācija un JSON automatizētām plūsmām.

Izmantojot mūsu, varat pārbaudīt konvertēšanu no viena formāta uz citu JSON/YAML pārveidotājs un ātri formatējiet dokumentu, izmantojot JSON formatētājs.

Bieži uzdotie jautājumi

Vai YAML ir lēnāks nekā JSON?

Jā, parasti YAML dokumenta parsēšana maksā vairākas reizes vairāk CPU nekā dokumenta parsēšana tas pats JSON dokuments, jo YAML gramatika ir bagātāka (atkāpe, tagi, enkuri). In praktiski, konfigurācijas failiem atšķirība ir niecīga. Tas kļūst jutīgs, kad jūs atkal un atkal analizējat desmitiem tūkstošu dokumentu.

Vai mēs varam automātiski pārveidot YAML par JSON?

Jā: jebkuru YAML dokumentu var pārvērst par JSON bez zaudējumiem, ja izvairāties no YAML veidiem specifiski (laikspiedoli, enkuri). Reverss ir vēl vienkāršāks, jo JSON ir apakškopa no YAML 1.2. Mūsu pārveidotājs iet abos virzienos.

Vai JSON pieņem komentārus?

Nē, JSON standarts tos aizliedz. Dialekti pastāv (JSON5, JSONC), bet ne vispārēji atbalstīts. Ja jums ir nepieciešami komentāri, izmantojiet YAML vai TOML.

Kāpēc Kubernetes izmanto YAML, nevis JSON?

Kubernetes manifestus raksta un pārskata cilvēki. YAML piedāvā komentārus, a mazāk trokšņaina sintakse un faktoringa iespēja, izmantojot enkurus. Kubernetes API pieņem arī JSON, taču idiomātiskais lietojums joprojām ir YAML.

Vai YAML tiešām ir JSON superkopa?

Jā, kopš YAML 1.2: jebkurš derīgs JSON dokuments ir derīgs YAML dokuments. Tas ļauj lai iegultu JSON YAML failā, to nemodificējot, kas ir praktiski blokiem ģenerēts vai kopēts un ielīmēts.