Introduksjon til JSON Schema i Java

1. Oversikt

JSON-skjema er et deklarativt språk for validering av formatet og strukturen til en JSON Objekt. Det lar oss spesifisere antall spesielle primitiver for å beskrive nøyaktig hva som er gyldig JSON Objekt vil se ut.

De JSON-skjema spesifikasjonen er delt inn i tre deler:

  • JSON Schema Core: JSON Schema Core-spesifikasjonen er der terminologien for et skjema er definert.
  • JSON Schema Validation: JSON Schema Validation-spesifikasjonen er dokumentet som definerer gyldige måter å definere valideringsbegrensninger på. Dette dokumentet definerer også et sett med nøkkelord som kan brukes til å spesifisere valideringer for et JSON API. I eksemplene som følger bruker vi noen av disse nøkkelordene.
  • JSON Hyper-Schema: Dette er en annen utvidelse av JSON Schema-spesifikasjonen, hvor hyperkoblingen og hypermedierelaterte nøkkelord er definert.

2. Definere et JSON-skjema

Nå som vi har definert hva en JSON-skjema brukes til, la oss lage en JSON Objekt og det tilsvarende JSON-skjema beskriver det.

Følgende er enkelt JSON Objekt som representerer en produktkatalog:

{"id": 1, "name": "Lampeskjerm", "pris": 0}

Vi kunne definere dens JSON-skjema som følger:

{"$ schema": "//json-schema.org/draft-04/schema#", "title": "Product", "description": "Et produkt fra katalogen", "type": "object" , "egenskaper": {"id": {"beskrivelse": "Den unike identifikatoren for et produkt", "type": "heltall"}, "navn": {"beskrivelse": "Produktets navn", " type ":" string "}," price ": {" type ":" number "," minimum ": 0," exclusiveMinimum ": true}}," required ": [" id "," name "," price "]}

Som vi kan se a JSON-skjema er en JSON-dokument, og det dokumentet MÅ være et objekt. Objektmedlemmer (eller egenskaper) definert av JSON-skjema er kalt søkeord.

La oss forklare nøkkelordene vi har brukt i utvalget vårt:

  • De $ skjema nøkkelord sier at dette skjemaet er skrevet i henhold til utkastet til v4-spesifikasjonen.
  • De tittel og beskrivelse nøkkelord er bare beskrivende ved at de ikke legger begrensninger til dataene som valideres. Hensikten med skjemaet er angitt med disse to nøkkelordene: beskriver et produkt.
  • De type nøkkelord definerer den første begrensningen på vår JSON data: det må være en JSON Objekt.

Et JSON-skjema KAN også inneholde egenskaper som ikke er skjemaord. I vårt tilfelle id, Navn, prisvil være medlemmer (eller eiendommer) av JSON Objekt.

For hver eiendom kan vi definere type. Vi definerte id og Navn som strengog pris som Nummer. I JSON-skjema et tall kan ha et minimum. Som standard er dette minimumet inkludert, så vi må spesifisere eksklusivMinimum.

Til slutt, Skjema forteller det id, Navn, og pris er kreves.

3. Validering med JSON Schema

Med vår JSON-skjema sette på plass vi kan validere våre JSON Objekt.

Det er mange biblioteker for å utføre denne oppgaven. For vårt eksempel har vi valgt Java json-schema-biblioteket.

Først og fremst må vi legge til følgende avhengighet til vår pom.xml:

 org.everit.json org.everit.json.schema 1.3.0 

Til slutt kan vi skrive et par enkle testtilfeller for å validere JSON Objekt:

@Test offentlig ugyldighet givenInvalidInput_whenValidating_thenInvalid () kaster ValidationException {JSONObject jsonSchema = new JSONObject (new JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ schema.json"))); JSONObject jsonSubject = ny JSONObject (ny JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ product_invalid.json"))); Skjema skjema = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

I dette tilfellet kastet ValidationException vil peke på #/pris. Hvis du ser på konsollen, vil den skrive ut følgende utdata:

# / pris: 0,0 er ikke høyere enn 0 

Den andre testen ser slik ut:

@Test offentlig ugyldighet gittValidInput_whenValidating_thenValid () kaster ValidationException {JSONObject jsonSchema = new JSONObject (new JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ schema.json"))); JSONObject jsonSubject = ny JSONObject (ny JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ product_valid.json"))); Skjema skjema = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

Siden vi bruker en gyldig JSON Objekt, blir det ikke kastet noen valideringsfeil.

4. Konklusjon

I denne artikkelen har vi definert hva et JSON-skjema er, og hvilke relevante søkeord som hjelper oss med å definere skjemaet vårt.

Kobling a JSON-skjema med tilsvarende JSON Objekt representasjon kan vi utføre noen valideringsoppgaver.

En enkel prøvesak av denne artikkelen finner du i GitHub-prosjektet.


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