Rozdiely medzi YAML a JSON

1. Prehľad

V tomto rýchlom článku sa pozrieme na rozdiely medzi YAML a JSON prostredníctvom rýchlych a praktických príkladov.

2. Formát

Ak chcete mať lepší obraz, začnime sa pozrieť na reprezentácie jednoduchého POJO vo formátoch JSON a YAML:

trieda Osoba {meno reťazca; Celé číslo; Uveďte záľuby; Personálny manažér; }

Najprv sa pozrime na jeho reprezentáciu JSON:

{"name": "John Smith", "age": 26, "hobby": ["sports", "cooking"], "manager": {"name": "Jon Doe", "age": 45, "koníčky": ["rybolov"], "manažér": null}}

Syntax JSON je trochu ťažkopádna, pretože používa špeciálnu syntax ako napríklad zložené zátvorky {} a hranaté zátvorky [] reprezentovať objekty a polia.

Ďalej sa pozrime, ako by vyzerala rovnaká štruktúra v YAML:

meno: John Smith vek: 26 záľuby: - ​​šport - manažér varenia: meno: Jon Doe vek: 45 záľuby: - ​​rybársky manažér:

Syntax YAML vyzerá trochu priateľskejšie, pretože používa medzery na označenie vzťahov medzi objektmi a ‘„Reprezentovať prvky poľa.

Vidíme, že hoci sú obidve ľahko čitateľné, YAML má tendenciu byť lepšie čitateľný pre človeka.

Ďalším bonusovým bodom pre YAML je počet riadkov potrebných na vyjadrenie rovnakých informácií - YAML trvá iba 11 riadkov, zatiaľ čo JSON 16.

3. Veľkosť

V predchádzajúcej časti sme videli, že YAML je zastúpený v menšom počte riadkov ako JSON, ale znamená to, že to zaberá menej miesta?

Poďme si predstaviť hlboko vnorenú štruktúru s rodičom a piatimi deťmi reprezentovanými ako JSON:

{"dieťa": {"dieťa": {"dieťa": {"dieťa": {"dieťa": {"dieťa": {"dieťa": null}}}}}}}

Rovnaká štruktúra by v YAML vyzerala podobne:

dieťa: dieťa: dieťa: dieťa: dieťa: dieťa: dieťa:

Na prvý pohľad by to mohlo vyzerať, že JSON zaberá viac miesta, ale v skutočnosti sa špecifikácia JSON nestará o medzery alebo nové riadky a dá sa skrátiť takto:

{"dieťa": {"dieťa": {"dieťa": {"dieťa": {"dieťa": {"dieťa": {"dieťa": null}}}}}}}

Vidíme, že druhá forma je oveľa kratšia a zaberá iba 74 bajtov, zatiaľ čo formát YAML trvá 97 bajtov.

4. Funkcie YAML

Okrem základných funkcií, ktoré poskytuje JSON, prichádza YAML s ďalšími funkciami, ako uvidíme ďalej.

4.1. Pripomienky

YAML umožňuje komentáre pomocou #, funkcia, ktorá je často požadovaná pri práci so súbormi JSON:

# Toto je jednoduchý názov komentára: John

4.2. Viacriadkové struny

Ďalšou funkciou, ktorá v JSON chýba, ale je prítomná v YAML, sú viacriadkové reťazce:

webová stránka: | riadok1 riadok2 riadok3

4.3. Aliasy a kotvy

Alias ​​ku konkrétnej položke môžeme ľahko priradiť pomocou & a ukotviť (odkazovať) pomocou *:

httpPort: 80 httpsPort: & httpsPort 443 defaultPort: * httpsPort

5. Výkon

Vďaka jednoduchej povahe špecifikácie JSON je jeho výkon pri analýze / serializácii údajov oveľa lepší ako YAML.

Budeme implementovať jednoduchý benchmark na porovnanie rýchlosti syntaktickej analýzy YAML a JSON pomocou JMH.

Pre benchmark YAML použijeme známe had-yaml knižnica a pre náš benchmark JSON použijeme org-json:

@BenchmarkMode (Mode.Throughput) @OutputTimeUnit (TimeUnit.SECONDS) @Measurement (batchSize = 10_000, iterations = 5) @Warmup (batchSize = 10_000, iterations = 5) @State (Scope.Thread) trieda Bench {static void main ( Reťazec [] args) {org.openjdk.jmh.Main.main (args); } @State (Scope.Thread) statická trieda YamlState {verejné Yaml yaml = nový Yaml (); } @Benchmark Object benchmarkYaml (YamlState yamlState) {return yamlState.yaml.load ("foo: bar"); } @Benchmark Object benchmarkJson (Blackhole blackhole) {return new JSONObject ("{\" foo \ ": \" bar \ "}"); }}

Ako sme mohli čakať, víťazom je JSON, ktorý je približne 30-krát rýchlejší:

Benchmark Mode Cnt Score Error Units Main2.benchmarkJson thrpt 50 644,085 ± 9,962 ops / s Main2.benchmarkYaml thrpt 50 20,351 ± 0,312 ops / s

6. Dostupnosť knižnice

JavaScript je štandard pre web, čo znamená, že je takmer nemožné nájsť jazyk, ktorý nepodporuje JSON úplne.

Na druhej strane je YAML široko podporovaný, ale nejde o štandard. To znamená, že knižnice existujú pre najobľúbenejšie programovacie jazyky, ale kvôli svojej zložitosti nemusia úplne implementovať špecifikáciu.

7. Čo si mám zvoliť?

Na toto by mohla byť zložitá odpoveď a v mnohých prípadoch subjektívna otázka.

Ak potrebujeme vystaviť sadu rozhraní REST API iným front-endovým alebo back-endovým aplikáciám, mali by sme pravdepodobne ísť s JSON, pretože to je de facto priemyselný štandard.

Ak potrebujeme vytvoriť konfiguračný súbor, ktorý budú ľudia často čítať / aktualizovať, YAML môže byť dobrou voľbou.

Samozrejme, môžu sa vyskytnúť aj prípady použitia, keď by sa YAML aj JSON dobre hodili a bude to len otázka vkusu.

8. Záver

V tomto rýchlom článku sme sa dozvedeli hlavné rozdiely medzi YAML a JSON a o tom, ktoré aspekty je potrebné vziať do úvahy pri informovanom rozhodovaní, ktorý z nich by sme si mali zvoliť.


$config[zx-auto] not found$config[zx-overlay] not found