Razlike između YAML-a i JSON-a

1. Pregled

U ovom ćemo kratkom članku kroz brze i praktične primjere pogledati razlike između YAML-a i JSON-a.

2. Format

Da bismo imali bolju sliku, krenimo s gledanjem JSON i YAML prikaza jednostavnog POJO:

razred Osoba {Ime niza; Cijela dob; Popis hobija; Menadžer osoba; }

Prvo, pogledajmo njegov JSON prikaz:

{"name": "John Smith", "age": 26, "hobiji": ["sport", "kuhanje"], "manager": {"name": "Jon Doe", "age": 45, "hobiji": ["ribolov"], "voditelj": null}}

Sintaksa JSON pomalo je glomazna jer koristi posebnu sintaksu poput kovrčavih zagrada {} i uglate zagrade [] za predstavljanje objekata i nizova.

Dalje, pogledajmo kako bi ista struktura izgledala u YAML-u:

ime: John Smith dob: 26 hobija: - sport - voditelj kuhanja: ime: Jon Doe dob: 45 hobija: - voditelj ribolova:

Sintaksa YAML-a izgleda malo prijateljskija jer koristi prazne prostore za označavanje odnosa između objekata i '‘Za predstavljanje elemenata niza.

Možemo vidjeti da iako su obje lako čitljive, YAML je teže čitljiviji ljudima.

Još jedan bonus poen za YAML je broj redaka potrebnih za predstavljanje istih podataka - YAML zauzima samo 11 linija, dok JSON uzima 16.

3. Veličina

U prethodnom smo odjeljku vidjeli da je YAML predstavljen u manje redaka od JSON-a, ali znači li to da zauzima manje prostora?

Zamislimo duboko ugniježđenu strukturu s roditeljem i petero djece predstavljenim kao JSON:

{"dijete": {"dijete": {"dijete": {"dijete": {"dijete": {"dijete": {"dijete": null}}}}}}}

Ista struktura izgledala bi slično u YAML-u:

dijete: dijete: dijete: dijete: dijete: dijete: dijete:

Na prvi pogled može izgledati da JSON zauzima više prostora, ali u stvarnosti, JSON specifikacija ne mari za razmak ili nove redove, a može se skratiti na sljedeći način:

{"dijete": {"dijete": {"dijete": {"dijete": {"dijete": {"dijete": {"dijete": null}}}}}}}

Vidimo da je drugi oblik puno kraći i zauzima samo 74 bajta, dok YAML format traje 97 bajtova.

4. Značajke YAML-a

Osim osnovnih značajki koje JSON pruža, YAML dolazi s dodatnom funkcionalnošću kao što ćemo vidjeti sljedeće.

4.1. Komentari

YAML dopušta komentare pomoću #, značajka koja je često poželjna pri radu s JSON datotekama:

# Ovo je jednostavno ime komentara: John

4.2. Višeredne žice

Još jedna značajka koja nedostaje u JSON-u, ali je prisutna u YAML-u su višeredni nizovi:

web stranica: | linija1 linija2 linija3

4.3. Pseudonimi i sidra

Pomoću njega lako možemo dodijeliti alias određenoj stavci & i usidrite ga (referencu) pomoću *:

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

5. Izvedba

Zbog jednostavne prirode JSON specifikacije, njegove su performanse u raščlanjivanju / serializaciji podataka puno bolje od YAML-a.

Primijenit ćemo jednostavnu referentnu vrijednost za usporedbu brzine raščlanjivanja YAML-a i JSON-a pomoću JMH-a.

Za YAML mjerilo upotrijebit ćemo dobro poznato zmija-jam knjižnicu, a za našu JSON referentnu vrijednost upotrijebit ćemo org-json:

@BenchmarkMode (Mode.Throughput) @OutputTimeUnit (TimeUnit.SECONDS) @Measurement (batchSize = 10_000, iterations = 5) @Warmup (batchSize = 10_000, iterations = 5) @State (Scope.Thread) klasa Klupa {static void main ( String [] args) {org.openjdk.jmh.Main.main (args); } @State (Scope.Thread) statička klasa YamlState {public Yaml yaml = new Yaml (); } @Benchmark Objekt benchmarkYaml (YamlState yamlState) {return yamlState.yaml.load ("foo: bar"); } @Benchmark Object benchmarkJson (Blackhole blackhole) {return new JSONObject ("{\" foo \ ": \" bar \ "}"); }}

Kao što smo mogli očekivati, JSON je pobjednik, otprilike 30 puta brži:

Benchmark Mode Cnt Rezultat Jedinice pogrešaka Main2.benchmarkJson thrpt 50 644.085 ± 9.962 ops / s Main2.benchmarkYaml thrpt 50 20.351 ± 0.312 ops / s

6. Dostupnost knjižnice

JavaScript je standard za web, što znači da je gotovo nemoguće pronaći jezik koji ne podržava u potpunosti JSON.

S druge strane, YAML je široko podržan, ali to nije standard. To znači da knjižnice postoje za većinu popularnih programskih jezika, ali zbog svoje složenosti možda neće u potpunosti implementirati specifikaciju.

7. Što bih trebao odabrati?

Na ovo bi pitanje moglo biti teško odgovoriti, a u mnogim slučajevima i subjektivno.

Ako trebamo izložiti skup REST API-ja drugim front-end ili back-end aplikacijama, vjerojatno bismo trebali ići s JSON-om jer je to de facto industrijski standard.

Ako trebamo stvoriti konfiguracijsku datoteku koju će ljudi često čitati / ažurirati, YAML bi mogao biti dobra opcija.

Naravno, možda postoje i slučajevi upotrebe kada bi i YAML i JSON dobro pristajali, a to će biti samo pitanje ukusa.

8. Zaključak

U ovom kratkom članku naučili smo glavne razlike između YAML-a i JSON-a i koje aspekte treba uzeti u obzir da bismo donijeli informiranu odluku o tome koji bismo trebali odabrati.


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