Bevezetés a Java JSON-sémájába

1. Áttekintés

JSON Schema deklaratív nyelv az a formátumának és szerkezetének érvényesítéséhez JSON Object. Ez lehetővé teszi számunkra, hogy meghatározzuk a speciális primitívek számát, hogy pontosan leírjuk, mi érvényes JSON Object fog kinézni.

A JSON Schema specifikáció három részre oszlik:

  • JSON séma mag: A séma terminológiáját a JSON séma alap specifikáció határozza meg.
  • JSON-séma érvényesítése: A JSON-séma-érvényesítés specifikáció az a dokumentum, amely meghatározza az érvényesítési korlátozások érvényes módjait. Ez a dokumentum meghatározza azokat a kulcsszavakat is, amelyek felhasználhatók a JSON API érvényesítésének megadására. A következő példákban ezeket a kulcsszavakat használjuk.
  • JSON Hyper-Schema: Ez a JSON Schema specifikáció másik kiterjesztése, amelyben a hiperhivatkozással és a hipermédiával kapcsolatos kulcsszavak vannak meghatározva.

2. JSON-séma meghatározása

Most, hogy meghatároztuk, mi a JSON Schema használjuk, hozzunk létre egy JSON Object és a megfelelő JSON Schema leírva.

A következő egyszerű JSON Object termékkatalógust képviselő:

{"id": 1, "name": "Lámpaernyő", "price": 0}

Meghatározhatnánk JSON Schema az alábbiak szerint:

{"$ schema": "//json-schema.org/draft-04/schema#", "title": "Termék", "description": "Termék a katalógusból", "type": "object" , "tulajdonságok": {"id": {"description": "A termék egyedi azonosítója", "type": "integer"}, "name": {"description": "A termék neve", " type ":" string "}," price ": {" type ":" number "," minimum ": 0," exclusiveMinimum ": true}}," required ": [" id "," name "," price "]}

Mint láthatjuk a JSON Schema egy JSON dokumentum, és ennek a dokumentumnak KELL objektumnak lennie. Az objektum tagjai (vagy tulajdonságai) által meghatározott JSON Schema hívják kulcsszavak.

Magyarázzuk el a mintánkban használt kulcsszavakat:

  • A $ séma kulcsszó azt állítja, hogy ez a séma a v4 specifikáció tervezete szerint íródott.
  • A cím és leírás a kulcsszavak csak leíró jellegűek, mivel nem tesznek korlátokat az érvényesítendő adatokra. A séma szándékát ezzel a két kulcsszóval közöljük: egy terméket ír le.
  • A típus kulcsszó meghatározza az első kényszert miénken JSON adatok: azt kell lennie a JSON Object.

Ezenkívül egy JSON séma tartalmazhat olyan tulajdonságokat, amelyek nem séma kulcsszavak. A mi esetünkben id, név, ártagjai (vagy tulajdonságai) lesznek a JSON Object.

Minden tulajdonságra meghatározhatjuk a típus. Meghatároztuk id és név mint húrés ár mint szám. Ban ben JSON Schema egy számnak lehet minimumja. Alapértelmezés szerint ez a minimum magában foglalja, ezért meg kell adnunk exclusiveMinimum.

Végül a Séma azt mondja id, név, és ár vannak kívánt.

3. Érvényesítés JSON-sémával

Velünk JSON Schema bevezetett érvényesíteni tudjuk a mi JSON Object.

Sok könyvtár van ennek a feladatnak a végrehajtására. Példaként a Java json-séma könyvtárat választottuk.

Mindenekelőtt hozzá kell adnunk a következő függőséget a sajátunkhoz pom.xml:

 org.everit.json org.everit.json.séma 1.3.0 

Végül írhatunk pár egyszerű tesztesetet a mi igazolásunkra JSON objektum:

@Test public void givenInvalidInput_whenValidating_thenInvalid () dobja a ValidationException {JSONObject jsonSchema = új JSONObject (új JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ schema.json")); JSONObject jsonSubject = új JSONObject (új JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ product_invalid.json"))); Séma séma = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

Ebben az esetben dobott ValidationException rámutat #/ár. Ha megnézi a konzolt, a következő kimenetet fogja kinyomtatni:

# / price: 0.0 nem magasabb, mint 0 

A második teszt a következőképpen néz ki:

@Test public void givenValidInput_whenValidating_thenValid () dobja a ValidationException {JSONObject jsonSchema = új JSONObject (új JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ schema.json")); JSONObject jsonSubject = új JSONObject (új JSONTokener (JSONSchemaTest.class.getResourceAsStream ("/ product_valid.json"))); Séma séma = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

Mivel érvényes JSON Object, nem dob ellenőrzési hibát.

4. Következtetés

Ebben a cikkben meghatároztuk, hogy mi a JSON-séma, és melyek azok a releváns kulcsszavak, amelyek segítenek a sémánk meghatározásában.

Csatolás a JSON Schema annak megfelelőjével JSON Object ábrázolással valamilyen érvényesítési feladatot elvégezhetünk.

A cikk egyszerű tesztesete megtalálható a GitHub projektben.