Különbségek a YAML és a JSON között

1. Áttekintés

Ebben a rövid cikkben gyors és praktikus példákon keresztül vesszük szemügyre a YAML és a JSON közötti különbségeket.

2. Formátum

A jobb kép érdekében kezdjük azzal, hogy megnézzük egy egyszerű POJO JSON és YAML ábrázolását:

osztály Személy {Karakter neve; Egész életkor; Sorolja fel a hobbikat; Személyvezető; }

Először nézzük meg a JSON ábrázolását:

{"név": "John Smith", "életkor": 26, "hobbi": ["sport", "főzés"], "menedzser": {"név": "Jon Doe", "életkor": 45, "hobbi": ["horgászat"], "menedzser": null}}

A JSON szintaxisa kissé nehézkes, mivel olyan speciális szintaxist használ, mint a göndör zárójel {} és szögletes zárójelben [] objektumok és tömbök ábrázolására.

Ezután nézzük meg, hogyan nézne ki ugyanaz a szerkezet a YAML-ben:

név: John Smith életkor: 26 hobbi: - sport - főzővezető: név: Jon Doe életkor: 45 hobbi: - horgászmenedzser:

A YAML szintaxisa kissé barátságosabbnak tűnik, mivel üres helyeket használ az objektumok és a’Tömb elemek ábrázolására.

Láthatjuk, hogy bár mindkettő könnyen olvasható, a YAML általában inkább ember által olvasható.

Egy másik bónuszpont a YAML számára az ugyanazon információ ábrázolásához szükséges sorok száma - a YAML csak 11, míg a JSON 16 sort vesz igénybe.

3. Méret

Az előző szakaszban láthattuk, hogy a YAML kevesebb sorban van ábrázolva, mint a JSON, de ez azt jelenti, hogy kevesebb helyet foglal?

Képzeljünk el egy mélyen beágyazott struktúrát, amelyben egy szülő és öt gyermek szerepel JSON néven:

{"gyermek": {"gyermek": {"gyermek": {"gyermek": {"gyermek": {"gyermek": {"gyermek": null}}}}}}}

Ugyanaz a szerkezet hasonlónak tűnik a YAML-ben:

gyermek: gyermek: gyermek: gyermek: gyermek: gyermek: gyermek:

Első látásra úgy tűnhet, hogy a JSON több helyet foglal el, de a valóságban a JSON specifikáció nem törődik a szóközzel vagy az új vonalakkal, és az alábbiak szerint rövidíthető:

{"gyermek": {"gyermek": {"gyermek": {"gyermek": {"gyermek": {"gyermek": {"gyermek": null}}}}}}}

Láthatjuk, hogy a második forma sokkal rövidebb, és csak 74 bájtot foglal el, míg a YAML formátum 97 bájtot foglal el.

4. YAML funkciók

A JSON által biztosított alapvető funkciók mellett a YAML további funkciókkal is rendelkezik, amint ezt a későbbiekben láthatjuk.

4.1. Hozzászólások

A YAML lehetővé teszi a megjegyzéseket a #, egy olyan szolgáltatás, amelyre gyakran szükség van a JSON fájlokkal való munka során:

# Ez egy egyszerű megjegyzésnév: John

4.2. Többsoros húrok

Egy másik, a JSON-ban hiányzó, de a YAML-ben szereplő szolgáltatás a többsoros karakterlánc:

weboldal: | line1 line2 line3

4.3. Álnevek és horgonyok

Könnyen hozzárendelhetünk egy álnevet egy adott elemhez a segítségével & és lehorgonyozni (hivatkozni) a segítségével *:

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

5. Teljesítmény

A JSON specifikációk egyszerű jellege miatt az adatok elemzése / sorosítása során sokkal jobb a teljesítménye, mint a YAML-nek.

Egy egyszerű referenciaértéket fogunk bevezetni a YAML és a JSON elemzési sebességének összehasonlítására a JMH segítségével.

A YAML referenciaértékéhez a jól ismerteket fogjuk használni kígyó-yaml könyvtárat, és a JSON-referenciaértékünkhöz felhasználjuk org-json:

@BenchmarkMode (Mode.Throughput) @OutputTimeUnit (TimeUnit.SECONDS) @Measurement (batchSize = 10_000, iterációk = 5) @Warmup (batchSize = 10_000, iterációk = 5) @State (Scope.Thread) osztály Bench {static void main ( Karakterlánc [] args) {org.openjdk.jmh.Main.main (args); } @State (Scope.Thread) statikus osztály YamlState {public Yaml yaml = new Yaml (); } @Benchmark Object benchmarkYaml (YamlState yamlState) {return yamlState.yaml.load ("foo: bar"); } @Benchmark Object benchmarkJson (Blackhole blackhole) {return new JSONObject ("{\" foo \ ": \" bar \ "}"); }}

Ahogy számíthattunk rá, a JSON a győztes, körülbelül 30-szor gyorsabb:

Benchmark Mode Cnt Score Hibaegységek Main2.benchmarkJson thrpt 50 644.085 ± 9.962 ops / s Main2.benchmarkYaml thrpt 50 20.351 ± 0.312 ops / s

6. Könyvtár elérhetősége

A JavaScript az internetes szabvány, vagyis szinte lehetetlen olyan nyelvet találni, amely nem támogatja teljes mértékben a JSON-t.

Másrészt a YAML széles körben támogatott, de ez nem szabvány. Ez azt jelenti, hogy a legnépszerűbb programozási nyelvek számára léteznek könyvtárak, de összetettsége miatt előfordulhat, hogy nem teljesen hajtják végre a specifikációt.

7. Mit válasszak?

Ez nehéz kérdés lehet, és sok esetben szubjektív.

Ha egy REST API-t ki kell terjesztenünk más front-end vagy back-end alkalmazások számára, akkor valószínűleg a JSON-t kell használnunk, mivel ez a tényleges ipari szabvány.

Ha létre kell hoznunk egy konfigurációs fájlt, amelyet az emberek gyakran olvasnak / frissítenek, a YAML jó megoldás lehet.

Természetesen előfordulhatnak olyan esetek is, amikor a YAML és a JSON is jól illene, és ez csak ízlés kérdése lesz.

8. Következtetés

Ebben a rövid cikkben megismertük a fő különbségeket a YAML és a JSON között, és hogy milyen szempontokat vegyünk figyelembe, hogy megalapozott döntést hozzunk arról, hogy melyiket válasszuk.


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