Verschillen tussen YAML en JSON

1. Overzicht

In dit korte artikel zullen we de verschillen tussen YAML en JSON bekijken aan de hand van snelle en praktische voorbeelden.

2. Formaat

Om een ​​beter beeld te krijgen, laten we beginnen met kijken naar de JSON- en YAML-representaties van een eenvoudige POJO:

klasse Persoon {Stringnaam; Integer leeftijd; Lijst met hobby's; Persoon manager; }

Laten we eerst eens kijken naar de JSON-weergave:

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

JSON-syntaxis is enigszins omslachtig omdat het speciale syntaxis zoals accolades gebruikt {} en vierkante haken [] om objecten en arrays weer te geven.

Laten we vervolgens kijken hoe dezelfde structuur eruit zou zien in YAML:

naam: John Smith leeftijd: 26 hobby's: - sport - kookmanager: naam: Jon Doe leeftijd: 45 hobby's: - visserijmanager:

De syntaxis van YAML ziet er een beetje vriendelijker uit omdat het lege spaties gebruikt om relaties tussen objecten aan te duiden en ‘‘Array-elementen vertegenwoordigen.

We kunnen zien dat, hoewel beide gemakkelijk leesbaar zijn, YAML de neiging heeft beter leesbaar te zijn voor mensen.

Een ander bonuspunt voor YAML is het aantal regels dat nodig is om dezelfde informatie weer te geven - YAML heeft slechts 11 regels nodig, terwijl JSON 16 regels nodig heeft.

3. Grootte

We hebben in de vorige sectie gezien dat YAML in minder regels wordt weergegeven dan JSON, maar betekent dit dat het minder ruimte in beslag neemt?

Laten we ons een diep geneste structuur voorstellen met een ouder en vijf kinderen voorgesteld als JSON:

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

Dezelfde structuur zou er ongeveer hetzelfde uitzien in YAML:

kind: kind: kind: kind: kind: kind: kind:

Op het eerste gezicht lijkt het erop dat JSON meer ruimte in beslag neemt, maar in werkelijkheid geeft JSON-specificatie niet om witruimte of nieuwe regels, en het kan als volgt worden ingekort:

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

We kunnen zien dat het tweede formulier veel korter is en slechts 74 bytes beslaat, terwijl het YAML-formaat 97 bytes in beslag neemt.

4. YAML-functies

Naast de basisfuncties die JSON biedt, wordt YAML geleverd met extra functionaliteit, zoals we hierna zullen zien.

4.1. Opmerkingen

YAML staat opmerkingen toe met behulp van #, een functie die vaak gewenst is bij het werken met JSON-bestanden:

# Dit is een eenvoudige reactienaam: John

4.2. Meerlijnige snaren

Een ander kenmerk dat ontbreekt in JSON maar aanwezig is in YAML, zijn strings met meerdere regels:

website: | regel1 regel2 regel3

4.3. Aliassen en ankers

We kunnen eenvoudig een alias aan een specifiek item toewijzen met & en veranker (referentie) het met *:

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

5. Prestaties

Vanwege de eenvoudige aard van de JSON-specificatie, zijn de prestaties bij het parseren / serialiseren van gegevens veel beter dan bij YAML.

We gaan een eenvoudige benchmark implementeren om de parseersnelheid van YAML en JSON met JMH te vergelijken.

Voor de YAML-benchmark gaan we het bekende slang-yaml bibliotheek, en voor onze JSON-benchmark gebruiken we org-json:

@BenchmarkMode (Mode.Throughput) @OutputTimeUnit (TimeUnit.SECONDS) @Measurement (batchSize = 10_000, iteraties = 5) @Warmup (batchSize = 10_000, iteraties = 5) @State (Scope.Thread) class Bench {static void main ( String [] args) {org.openjdk.jmh.Main.main (args); } @State (Scope.Thread) statische klasse YamlState {openbare Yaml yaml = nieuwe Yaml (); } @Benchmark Object benchmarkYaml (YamlState yamlState) {return yamlState.yaml.load ("foo: bar"); } @Benchmark Object benchmarkJson (Blackhole blackhole) {retourneer nieuw JSONObject ("{\" foo \ ": \" bar \ "}"); }}

Zoals we misschien hadden verwacht, is JSON de winnaar, ongeveer 30 keer sneller:

Benchmarkmodus Cnt Score Fouteenheden Main2.benchmarkJson thrpt 50644.085 ± 9.962 ops / s Main2.benchmarkYaml thrpt 50 20.351 ± 0.312 ops / s

6. Bibliotheekbeschikbaarheid

JavaScript is de standaard voor internet, wat betekent dat het bijna onmogelijk is om een ​​taal te vinden die JSON niet volledig ondersteunt.

Aan de andere kant wordt YAML breed ondersteund, maar het is geen standaard. Dit betekent dat er bibliotheken bestaan ​​voor de meeste populaire programmeertalen, maar vanwege de complexiteit is het mogelijk dat ze de specificatie niet volledig implementeren.

7. Wat moet ik kiezen?

Dit kan een moeilijke vraag zijn om te beantwoorden en in veel gevallen een subjectieve vraag.

Als we een set REST-API's moeten blootstellen aan andere front-end- of back-end-applicaties, moeten we waarschijnlijk voor JSON gaan, aangezien dit de de facto industriestandaard is.

Als we een configuratiebestand moeten maken dat vaak door mensen wordt gelezen / bijgewerkt, is YAML misschien een goede optie.

Natuurlijk kunnen er ook gebruiksscenario's zijn waarin zowel YAML als JSON goed zouden passen, en het zal gewoon een kwestie van smaak zijn.

8. Conclusie

In dit korte artikel hebben we de belangrijkste verschillen tussen YAML en JSON geleerd en welke aspecten we moeten overwegen om een ​​weloverwogen beslissing te nemen over welke we moeten kiezen.


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