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.