allan ebdrup bloghoved ny

Hvordan validerer du din JSON?

Du kan validere JSON på et hav af måder. Der er nærmest gået sport i at lave sin egen implementation af JSON-validering. Det er spild af gode kræfter.

Der findes nemlig en standard for JSON validering, der meget simpelt hedder JSON schema. Selvom standarden kun er i en draft 4, og den egentlig er udløbet, er der ret stor opbakning til standarden.

JSON schema har implementationer i mange programmerings-sprog. I Node.js er der specielt mange implementationer, så det kan være svært at vælge den rigtige.

Hvilken validator implementation er hurtigst? Hvilken implementation har færrest fejl, når man kører den officielle JSON schema test suite mod den?

Implementationerne bliver nemme at sammenligne, når de implementerer den samme standard. De kan konkurrere på lige fod. Men det kræver, at en uvildig part laver sammenligningen.

Vælg den hurtigste

For at gøre det nemmere at vælge en implementation i Node.js har jeg bygget en Open Source benchmark.

Her er resultaterne for performance, som de ser ud lige nu:

performance

Det er nemt at se, at man skal vælge is-my-json-valid, når det handler om performance. Den er 5x hurtigere end nummer to og 1000x hurtigere end den langsomste.

Vælg den, der overholder standarden

Når man så kører implementationerne op imod den officielle JSON schema test suite, er der også forskel på implementationerne.

Her er en graf over, hvor mange af de officielle test der fejler for hver implementation:

failing tests

For flere af implementationerne er det et bevidst valg at undlade at implementere dele af standarden.

Det kan du læse mere om på deres hjemmesider.

is-my-json-valid, themis, z-schema, jjv, skeemas, jayschema, jsck, jassi, JSV, request-validator, json-gate, json-model, tv4, jsonschema, revalidator.

Open Source og standarder

Standarder gør det muligt, at sammenligne implementationer i en benchmark. Under arbejdet med at benchmarke fandt jeg fejl i flere af implementationerne. De fejl oprettede jeg som issues på implementationernes github repositories. Mange af fejlene er allerede blevet rettet.

Jeg har også gjort de forskellige implementationers ophavspersoner opmærksomme på hinanden. Nogle af dem er begyndt at samarbejde og diskutere.

Du kan altid finde de nyeste resultater og mange flere detaljer i benchmarken.

Hvordan validerer du selv din JSON?

Kommentarer (14)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Jacob Nordfalk

Spændende læsning.
Nu validerer min håndskrevne JSON generelt ikke, fordi jeg bruger den til konfiguration af grunddata, og bruger her // til kommentarer og det æder Android JSON-parseren, som er den eneste der skal læse koden alligevel.

Er der kommet en lovlig måde at skrive kommentarer i JSON?

  • 3
  • 0
Henrik Eiriksson

Først et tillykke med at få de forskellige udviklere til at samarbejde! Forhåbenligt kommer det til at gavne flere af implementationerne.

is-my-json-valid hjemmesiden står der:

is-my-json-valid uses code generation to turn your JSON schema into basic javascript code that is easily optimizeable by v8.

Jeg har ikke undersøgt dens kode, men gætter på at det første kald med en ny JSON giver et performance hit men at efterfølgende kald benytter den cachede, genererede kode.

  • 2
  • 0
Allan Ebdrup Blogger

Jeg har ikke undersøgt dens kode, men gætter på at det første kald med en ny JSON giver et performance hit men at efterfølgende kald benytter den cachede, genererede kode.


Var til en præsentation af Mathias hvor han forklarede teknikken. Og spurgte om det samme. Hans metoden er faktisk hurtigere end "standard" varianten af at validere, selv når koden genereres på hvert eneste kald.
Han testede det til hans talk til et CopenhagenJS meetup (kørte en benchmark) på projektorene , så alle kunne se det.

Men ja, den er endnu hurtigere hvis du kalder igen og igen, med det samme skema der er kompileret.

  • 0
  • 0
Troels Henriksen

Hvorfor er JSON-skemaer beskrevet i JSON? Jeg mener, JSON virker skam nyttigt til dataoverførsel, men det virker ikke som noget oplagt format til at beskrive en grammatik, og eksemplerne på skemaer er da også grimmere og større end jeg tror de ville være i et hypotetisk specialiseret format.

  • 2
  • 0
Allan Ebdrup Blogger
  • 0
  • 0
Log ind eller Opret konto for at kommentere