Uvod u JSON shemu na Javi

1. Pregled

JSON shema je deklarativni jezik za provjeru formata i strukture a JSON objekt. Omogućuje nam da odredimo broj posebnih primitiva kako bismo točno opisali što vrijedi JSON objekt izgledat će.

The JSON shema specifikacija je podijeljena u tri dijela:

  • JSON jezgra sheme: Specifikacija JSON sheme jezgre je mjesto gdje je definirana terminologija za shemu.
  • JSON provjera valjanosti sheme: Specifikacija provjere valjanosti sheme JSON dokument je koji definira valjane načine definiranja ograničenja provjere valjanosti. Ovaj dokument također definira skup ključnih riječi koji se mogu koristiti za specificiranje provjera valjanosti za JSON API. U slijedećim primjerima koristit ćemo neke od ovih ključnih riječi.
  • JSON hiper-shema: Ovo je još jedno proširenje specifikacije JSON sheme, pri čemu su definirane ključne riječi povezane s hipervezom i hipermedijom.

2. Definiranje JSON sheme

Sad kad smo definirali što a JSON shema koristi se za, stvorimo a JSON objekt i odgovarajuće JSON shema opisujući ga.

Slijedi jednostavno JSON objekt koji predstavljaju katalog proizvoda:

{"id": 1, "name": "Sjenilo", "price": 0}

Mogli bismo to definirati JSON shema kako slijedi:

{"$ schema": "//json-schema.org/draft-04/schema#", "title": "Product", "description": "Proizvod iz kataloga", "type": "object" , "svojstva": {"id": {"description": "Jedinstveni identifikator proizvoda", "type": "integer"}, "name": {"description": "Naziv proizvoda", " type ":" string "}," price ": {" type ":" number "," minimum ": 0," exclusiveMinimum ": true}}," required ": [" id "," name "," price "]}

Kao što vidimo a JSON shema je JSON dokument, a taj dokument MORA biti objekt. Članovi objekta (ili svojstva) definirani pomoću JSON shema se zovu ključne riječi.

Objasnimo ključne riječi koje smo upotrijebili u našem uzorku:

  • The $ shema Ključna riječ navodi da je ova shema napisana prema nacrtu v4 specifikacije.
  • The titula i opis ključne riječi su samo opisne, jer ne dodaju ograničenja podacima koji se provjeravaju. Namjera sheme navedena je s ove dvije ključne riječi: opisuje proizvod.
  • The tip ključna riječ definira prvo ograničenje na naš JSON podaci: to mora biti a JSON objekt.

Također, JSON shema MOŽE sadržavati svojstva koja nisu ključne riječi sheme. U našem slučaju iskaznica, Ime, cijenabit će članovi (ili svojstva) JSON objekt.

Za svako svojstvo možemo definirati tip. Mi smo definirali iskaznica i Ime kao nizi cijena kao broj. U JSON shema broj može imati minimum. Prema zadanim postavkama ovaj minimum uključuje, pa ga moramo navesti ekskluzivniMinimum.

Napokon, Shema govori to iskaznica, Ime, i cijena jesu potreban.

3. Provjera valjanosti pomoću JSON sheme

S našim JSON shema staviti na mjesto možemo potvrditi naše JSON objekt.

Postoji mnogo knjižnica koje mogu izvršiti ovaj zadatak. Za naš smo primjer odabrali Java json-schema knjižnicu.

Prije svega, trebamo dodati sljedeću ovisnost o našoj pom.xml:

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

Napokon, možemo napisati nekoliko jednostavnih testnih slučajeva kako bismo potvrdili svoj JSON objekt:

@Test public void givenInvalidInput_whenValidating_thenInvalid () baca ValidationException {JSONObject jsonSchema = new JSONObject (new JSONTokener (JSONSchemaTest.class.getResourceAsStream (")). JSONObject jsonSubject = novi JSONObject (novi JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ product_invalid.json"))); Shema sheme = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

U ovom slučaju, bačen ValidationException ukazat će na #/cijena. Ako pogledate konzolu, ispisat će se sljedeći izlaz:

# / cijena: 0,0 nije veća od 0 

Drugi test izgleda ovako:

@Test javna praznina givenValidInput_whenValidating_thenValid () baca ValidationException {JSONObject jsonSchema = new JSONObject (new JSONTokener (JSONSchemaTest.class.getResourceAsStream (")); JSONObject jsonSubject = novi JSONObject (novi JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ product_valid.json"))); Shema sheme = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

Budući da koristimo valjanu JSON objekt, neće se pojaviti pogreška provjere valjanosti.

4. Zaključak

U ovom smo članku definirali što je JSON shema i koje su neke relevantne ključne riječi koje nam pomažu u definiranju naše sheme.

Spajanje a JSON shema s pripadajućim JSON objekt predstavljanje možemo izvršiti neki zadatak provjere valjanosti.

Jednostavan test ovog članka možete pronaći u projektu GitHub.