Introduktion til JSON-skema i Java

1. Oversigt

JSON-skema er et deklarativt sprog til validering af formatet og strukturen på en JSON-objekt. Det giver os mulighed for at specificere antallet af specielle primitiver for at beskrive nøjagtigt, hvad der er gyldigt JSON-objekt vil se ud.

Det JSON-skema specifikationen er opdelt i tre dele:

  • JSON Schema Core: JSON Schema Core-specifikationen er, hvor terminologien for et skema er defineret.
  • JSON Schema Validation: JSON Schema Validation-specifikationen er det dokument, der definerer de gyldige måder at definere valideringsbegrænsninger på. Dette dokument definerer også et sæt nøgleord, der kan bruges til at specificere valideringer for en JSON API. I de følgende eksempler bruger vi nogle af disse nøgleord.
  • JSON Hyper-Schema: Dette er en anden udvidelse af JSON Schema-specifikationen, hvor hyperlink og hypermedierelaterede nøgleord er defineret.

2. Definition af et JSON-skema

Nu hvor vi har defineret, hvad en JSON-skema bruges til, lad os oprette en JSON-objekt og det tilsvarende JSON-skema beskriver det.

Det følgende er simpelt JSON-objekt repræsenterer et produktkatalog:

{"id": 1, "name": "Lampeskærm", "pris": 0}

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

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

Som vi kan se a JSON-skema er en JSON-dokument, og dokumentet SKAL være et objekt. Objektmedlemmer (eller egenskaber) defineret af JSON-skema hedder nøgleord.

Lad os forklare de nøgleord, som vi har brugt i vores prøve:

  • Det $ skema nøgleord angiver, at dette skema er skrevet i henhold til udkast til v4-specifikation.
  • Det titel og beskrivelse nøgleord er kun beskrivende, idet de ikke tilføjer begrænsninger for de data, der valideres. Formålet med skemaet er angivet med disse to nøgleord: beskriver et produkt.
  • Det type nøgleord definerer den første begrænsning på vores JSON data: det skal være -en JSON-objekt.

Et JSON-skema KAN også indeholde egenskaber, der ikke er skema-nøgleord. I vores tilfælde id, navn, prisvil være medlemmer (eller egenskaber) af JSON-objekt.

For hver egenskab kan vi definere type. Vi definerede id og navn som snorog pris som nummer. I JSON-skema et tal kan have et minimum. Dette minimum er som standard inkluderet, så vi skal specificere eksklusivMinimum.

Endelig blev Skema fortæller det id, navnog pris er krævet.

3. Validering med JSON-skema

Med vores JSON-skema putte på plads vi kan validere vores JSON-objekt.

Der er mange biblioteker, der kan udføre denne opgave. For vores eksempel har vi valgt Java json-schema-biblioteket.

Først og fremmest skal vi tilføje følgende afhængighed til vores pom.xml:

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

Endelig kan vi skrive et par enkle testtilfælde for at validere vores JSON Objekt:

@Test offentlig ugyldighed 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"))); Skema skema = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

I dette tilfælde kastet ValidationException vil pege på #/pris. Hvis du ser på konsollen, udskrives følgende output:

# / pris: 0,0 er ikke højere end 0 

Den anden test ligner følgende:

@Test offentlig ugyldighed givenValidInput_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"))); Skema skema = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

Da vi bruger en gyldig JSON-objekt, vil der ikke blive kastet nogen valideringsfejl.

4. Konklusion

I denne artikel har vi defineret, hvad et JSON-skema er, og hvilke er nogle relevante søgeord, der hjælper os med at definere vores skema.

Kobling a JSON-skema med dets tilsvarende JSON-objekt repræsentation kan vi udføre en valideringsopgave.

En simpel test case af denne artikel kan findes i GitHub-projektet.


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