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.