Einführung in das JSON-Schema in Java

Einführung in JSON Schema in Java

1. Überblick

JSON Schema ist eine deklarative Sprache zur Validierung des Formats und der Struktur vonJSON Object. Es ermöglicht uns, die Anzahl der speziellen Grundelemente anzugeben, um genau zu beschreiben, wie ein gültigerJSON Object aussehen wird.

Die Spezifikation vonJSON Schemaist in drei Teile unterteilt:

  • JSON Schema Core: In der JSON Schema Core-Spezifikation wird die Terminologie für ein Schema definiert.

  • JSON Schema Validation: Die JSON-Schema-Validierungsspezifikation ist das Dokument, das die gültigen Methoden zum Definieren von Validierungsbeschränkungen definiert. In diesem Dokument werden auch eine Reihe von Schlüsselwörtern definiert, mit denen Überprüfungen für eine JSON-API angegeben werden können. In den folgenden Beispielen werden einige dieser Keywords verwendet.

  • JSON Hyper-Schema: Dies ist eine weitere Erweiterung der JSON-Schemaspezifikation, in der der Hyperlink und die Hypermedia-bezogenen Schlüsselwörter definiert sind.

2. Definieren eines JSON-Schemas

Nachdem wir definiert haben, wofür einJSON Schema verwendet wird, erstellen wir einJSON Object und die entsprechendenJSON Schema, die es beschreiben.

Das Folgende ist ein einfachesJSON Object, das einen Produktkatalog darstellt:

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

Wir könnten seineJSON Schema wie folgt definieren:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Product",
    "description": "A product from the catalog",
    "type": "object",
    "properties": {
        "id": {
            "description": "The unique identifier for a product",
            "type": "integer"
        },
        "name": {
            "description": "Name of the product",
            "type": "string"
        },
        "price": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
        }
    },
    "required": ["id", "name", "price"]
}

Wie wir sehen können, ist einJSON Schema einJSON document, und dieses Dokument MUSS ein Objekt sein. Objektelemente (oder Eigenschaften), die durchJSON Schema definiert sind, werden alskeywords bezeichnet.

Lassen Sie uns die Schlüsselwörter erklären, die wir in unserem Beispiel verwendet haben:

  • Das Schlüsselwort$schema gibt an, dass dieses Schema gemäß dem Entwurf der v4-Spezifikation geschrieben wurde.

  • Die Schlüsselwörtertitle unddescription sind nur insofern beschreibend, als sie den zu validierenden Daten keine Einschränkungen hinzufügen. Die Absicht des Schemas wird mit diesen beiden Schlüsselwörtern angegeben: beschreibt ein Produkt.

  • Das Schlüsselworttypedefines the first constraint in unserenJSON-Daten: ithas to be aJSON Object.

Ein JSON-Schema KANN auch Eigenschaften enthalten, bei denen es sich nicht um Schema-Schlüsselwörter handelt. In unserem Fall sindid,name,price Mitglieder (oder Eigenschaften) derJSON Object.

Für jede Eigenschaft können wir dietype definieren. Wir habenid undname alsstring undprice alsnumber definiert. InJSON Schema kann eine Zahl ein Minimum haben. Standardmäßig ist dieses Minimum inklusive, daher müssen wirexclusiveMinimum angeben.

Schließlich sagtSchema, dassid,name undpricerequired sind.

3. Validierung mit JSON Schema

Mit unserenJSON Schema setzenwe can validate unsereJSON Object.

Es gibt vielelibraries, um diese Aufgabe zu erfüllen. In unserem Beispiel haben wir die Bibliothek von Javajson-schemaausgewählt.

Zunächst müssen wir unserenpom.xml die folgende Abhängigkeit hinzufügen:


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

Schließlich können wir ein paar einfache Testfälle schreiben, um unsereJSON Object: zu validieren

@Test
public void givenInvalidInput_whenValidating_thenInvalid() throws ValidationException {
    JSONObject jsonSchema = new JSONObject(
      new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json")));
    JSONObject jsonSubject = new JSONObject(
      new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product_invalid.json")));

    Schema schema = SchemaLoader.load(jsonSchema);
    schema.validate(jsonSubject);
}

In diesem Fall zeigtValidationException auf#/price.. Wenn Sie sich die Konsole ansehen, wird die folgende Ausgabe gedruckt:

#/price: 0.0 is not higher than 0

Der zweite Test sieht folgendermaßen aus:

@Test
public void givenValidInput_whenValidating_thenValid() throws ValidationException {
    JSONObject jsonSchema = new JSONObject(
      new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json")));
    JSONObject jsonSubject = new JSONObject(
      new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product_valid.json")));

    Schema schema = SchemaLoader.load(jsonSchema);
    schema.validate(jsonSubject);
}

Da wir ein gültigesJSON Object verwenden, wird kein Validierungsfehler ausgelöst.

4. Fazit

In diesem Artikel haben wir definiert, was ein JSON-Schema ist und welche relevanten Schlüsselwörterthat helps usind, um unser Schema zu definieren.

[#result_box .short_text] #Koppeln einesJSON Schema mit der entsprechendenJSON Object-Darstellung können wir eine Validierungsaufgabe ausführen. #

Ein einfacher Testfall dieses Artikels ist inGitHub project zu finden.