Forskjeller mellom YAML og JSON

1. Oversikt

I denne raske artikkelen tar vi en titt på forskjellene mellom YAML og JSON gjennom raske og praktiske eksempler.

2. Format

For å få et bedre bilde, la oss starte med å se på JSON- og YAML-representasjonene av en enkel POJO:

klasse Person {Strengnavn; Heltalder; Liste hobbyer; Personleder; }

La oss først se på JSON-representasjonen:

{"name": "John Smith", "age": 26, "hobbies": ["sports", "cooking"], "manager": {"name": "Jon Doe", "age": 45, "hobbyer": ["fiske"], "manager": null}}

JSON-syntaksen er litt tungvint, da den bruker spesiell syntaks som krøllete bukseseler {} og firkantede parenteser [] å representere objekter og matriser.

La oss deretter se hvordan den samme strukturen ville se ut i YAML:

navn: John Smith alder: 26 hobbyer: - sport - kokkeleder: navn: Jon Doe alder: 45 hobbyer: - fiskesjef:

YAMLs syntaks ser litt vennligere ut da den bruker tomme mellomrom for å betegne forholdet mellom objekter og '‘Å representere matriseelementer.

Vi kan se at selv om begge er lett lesbare, har YAML en tendens til å være mer lesbar for mennesker.

Et annet bonuspoeng for YAML er antall linjer det tar å representere den samme informasjonen - YAML tar bare 11 linjer, mens JSON tar 16.

3. Størrelse

Vi har sett i forrige avsnitt at YAML er representert i færre linjer enn JSON, men betyr det at det tar mindre plass?

La oss forestille oss en dypt nestet struktur med en forelder og fem barn representert som JSON:

{"child": {"child": {"child": {"child": {"child": {"child": {"child": null}}}}}}

Den samme strukturen vil se ut i YAML:

barn: barn: barn: barn: barn: barn: barn:

Ved første øyekast kan det se ut som JSON tar mer plass, men i virkeligheten bryr JSON-spesifikasjonen seg ikke om mellomrom eller nye linjer, og den kan forkortes som følger:

{"child": {"child": {"child": {"child": {"child": {"child": {"child": null}}}}}}

Vi kan se at den andre formen er mye kortere, og den tar bare 74 byte, mens YAML-formatet tar 97 byte.

4. YAML-funksjoner

Foruten de grunnleggende funksjonene som JSON gir, kommer YAML med ekstra funksjonalitet som vi får se neste.

4.1. Kommentarer

YAML tillater kommentarer ved å bruke #, en funksjon som ofte er ønsket når du arbeider med JSON-filer:

# Dette er et enkelt kommentarnavn: John

4.2. Multi-Line strenger

En annen funksjon som mangler i JSON, men som er til stede i YAML, er streng med flere linjer:

nettside: | linje1 linje2 linje3

4.3. Aliaser og ankere

Vi kan enkelt tilordne et alias til et bestemt element ved hjelp av & og forankre (referanse) det ved hjelp av *:

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

5. Ytelse

På grunn av den enkle karakteren til JSON-spesifikasjonen, er ytelsen i parsing / serialisering av data mye bedre enn YAML.

Vi skal implementere en enkel referanse for å sammenligne parsningshastigheten til YAML og JSON ved hjelp av JMH.

For YAML-referansen skal vi bruke det velkjente slange-yaml bibliotek, og for vår JSON-referanse vil vi bruke org-json:

@BenchmarkMode (Mode.Throughput) @OutputTimeUnit (TimeUnit.SECONDS) @Measurement (batchSize = 10_000, iterations = 5) @Warmup (batchSize = 10_000, iterations = 5) @State (Scope.Thread) class Bench {statisk ugyldig hoved ( String [] args) {org.openjdk.jmh.Main.main (args); } @State (Scope.Thread) statisk klasse YamlState {offentlig Yaml yaml = ny Yaml (); } @Benchmark Object benchmarkYaml (YamlState yamlState) {return yamlState.yaml.load ("foo: bar"); } @Benchmark Object benchmarkJson (Blackhole blackhole) {return new JSONObject ("{\" foo \ ": \" bar \ "}"); }}

Som vi kanskje hadde forventet, er JSON vinneren, omtrent 30 ganger raskere:

Referansemodus Cnt Score Error Units Main2.benchmarkJson thrpt 50 644.085 ± 9.962 ops / s Main2.benchmark Yaml thrpt 50 20.351 ± 0.312 ops / s

6. Tilgjengelighet av biblioteket

JavaScript er standarden for nettet, noe som betyr at det er nesten umulig å finne et språk som ikke fullt ut støtter JSON.

På den annen side støttes YAML bredt, men det er ikke en standard. Dette betyr at biblioteker eksisterer for de fleste populære programmeringsspråk, men på grunn av dets kompleksitet implementerer de kanskje ikke spesifikasjonen fullt ut.

7. Hva bør jeg velge?

Dette kan være et vanskelig spørsmål å svare på og et subjektivt spørsmål i mange tilfeller.

Hvis vi trenger å eksponere et sett med REST API-er for andre front- eller back-end-applikasjoner, bør vi sannsynligvis gå med JSON, da det er de facto industristandard.

Hvis vi trenger å lage en konfigurasjonsfil som ofte blir lest / oppdatert av mennesker, kan YAML være et godt alternativ.

Selvfølgelig kan det også være brukstilfeller der både YAML og JSON passer bra, og det vil bare være et spørsmål om smak.

8. Konklusjon

I denne raske artikkelen har vi lært de viktigste forskjellene mellom YAML og JSON og hvilke aspekter vi bør vurdere for å ta en informert beslutning om hvilken vi skal velge.


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