JSON, oder JavaScript Object Notation, ist ein leichtgewichtiges Datenformat, das einfach zu lesen und zu schreiben ist. Es wird häufig für den Datenaustausch zwischen einem Server und einem Webclient verwendet. JSON ist sprachunabhängig, was bedeutet, dass es in vielen Programmiersprachen verwendet werden kann, einschließlich Java, Python, JavaScript und vielen anderen.
Es wurde als Alternative zu XML entwickelt, um ein einfacheres und leichter lesbares Format für den Datenaustausch zu bieten. JSON hat sich schnell als Standard für APIs (Application Programming Interfaces) etabliert und wird heute in vielen Webanwendungen und Diensten verwendet.
JSON selbst definiert kein formales Datenschema wie es bei relationalen Datenbanken oder XML Schema Definition (XSD) der Fall ist. JSON ist ein flexibles Datenformat, das keine strikten Regeln für die Struktur der Daten vorgibt. Dies bedeutet, dass JSON-Dokumente in ihrer Struktur variieren können und keine vorab definierte Schema-Validierung erfordern.
Obwohl JSON selbst kein formales Schema definiert, gibt es eine separate Spezifikation namens JSON Schema, die verwendet werden kann, um die Struktur und Validierung von JSON-Daten zu beschreiben. JSON Schema bietet eine Möglichkeit, die erwarteten Datenstrukturen und -typen zu definieren und JSON-Dokumente gegen dieses Schema zu validieren.
JSON-Daten bestehen aus zwei grundlegenden Strukturen:
Objekte: Eine Sammlung von Variablen, die in geschweifte Klammern {} eingeschlossen sind.
Arrays: Eine geordnete Liste von Werten, die in eckige Klammern [] eingeschlossen sind.
Hier ist ein einfaches JSON-Beispiel, das ein Objekt und ein Array enthält:
{ "name": "John Doe", "age": 30, "isStudent": false, "courses": [ "Mathematics", "Computer Science" ], "address": { "street": "123 Main St", "city": "Anytown", "postalCode": "12345" }}In diesem Beispiel haben wir:
Ein Objekt mit den Variablen name, age, isStudent, courses und address.
Ein Array courses, das zwei Werte enthält: "Mathematics" und "Computer Science".
Ein verschachteltes Objekt address, das weitere Schlüssel-Wert-Paare enthält.
JSON unterstützt die folgenden Datentypen:
String: Eine Folge von Zeichen, die in doppelten Anführungszeichen eingeschlossen sind.
Number: Eine Zahl, die sowohl Ganzzahlen als auch Gleitkommazahlen umfassen kann.
Boolean: Ein Wahrheitswert, der entweder true oder false sein kann.
Array: Eine geordnete Liste von Werten.
Object: Eine Sammlung von Variablen.
null: Ein spezieller Wert, der die Abwesenheit eines Wertes darstellt.
In Java können JSON-Daten mithilfe von Bibliotheken wie org.json verarbeitet werden.
Ein JSON Schema ist ein mächtiges Werkzeug, um die Struktur und die Datentypen von JSON-Daten zu definieren und zu validieren. Es hilft dabei, sicherzustellen, dass JSON-Daten den erwarteten Anforderungen entsprechen.
$schema: Gibt die Version des JSON Schema-Standards an, die verwendet wird. In diesem Fall ist es der Entwurf 07.
Beispiel: "$schema": "http://json-schema.org/draft-07/schema#"
title: Ein optionaler Titel für das Schema, der zur Dokumentation dient.
Beispiel: "title": "Book"
type: Gibt den Datentyp des JSON-Dokuments oder des JSON-Objekts an. Häufig verwendete Typen sind object, array, string, number, integer, boolean und null.
Beispiel: "type": "object"
properties: Definiert die Eigenschaften (Schlüssel-Wert-Paare) eines JSON-Objekts und deren erwartete Datentypen.
Beispiel:
"properties": { "title": { "type": "string" }, "author": { "type": "string" }, "publication_year": { "type": "integer" }, "isbn": { "type": "string", "pattern": "^[0-9]{3}-[0-9]{10}$" }, "publisher": { "type": "string" }, "chapters": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string" }, "pages": { "type": "integer" } }, "required": ["title", "pages"] } }}required: Eine Liste von Eigenschaften, die im JSON-Objekt vorhanden sein müssen.
Beispiel: "required": ["title", "author", "publication_year", "isbn", "publisher", "chapters"]
pattern: Ein regulärer Ausdruck, der den Wert eines String-Eigenschafts validiert. In diesem Beispiel wird das ISBN-Feld überprüft, um sicherzustellen, dass es aus drei Ziffern, einem Bindestrich und zehn Ziffern besteht.
Beispiel: "pattern": "^[0-9]{3}-[0-9]{10}$"
items: Definiert die Struktur und die Datentypen der Elemente in einem JSON-Array.
Beispiel:
Das JSON Schema beschreibt die Struktur eines Buch-JSON-Dokuments wie folgt:
$schema: Gibt an, dass das Schema dem Entwurf 07 des JSON Schema-Standards entspricht.
title: Der Titel des Schemas ist "Book".
type: Das JSON-Dokument soll ein Objekt sein.
properties: Definiert die Eigenschaften des Objekts:
title: Ein String, der den Titel des Buches darstellt.
author: Ein String, der den Autor des Buches darstellt.
publication_year: Ein Integer, der das Veröffentlichungsjahr des Buches darstellt.
isbn: Ein String, der die ISBN-Nummer des Buches darstellt. Der Wert muss einem bestimmten Muster entsprechen.
publisher: Ein String, der den Verlag des Buches darstellt.
chapters: Ein Array von Objekten, wobei jedes Objekt ein Kapitel darstellt. Jedes Kapitel hat:
title: Ein String, der den Titel des Kapitels darstellt.
pages: Ein Integer, der die Seitenzahl des Kapitels darstellt.
required: Eine Liste von Eigenschaften, die im JSON-Objekt vorhanden sein müssen. Dies stellt sicher, dass die JSON-Daten alle erforderlichen Felder enthalten.
Es folgt ein Beispiel, wie JSON-Daten gegen ein JSON Schema in einem Java-Programm validiert werden. Hierfür wird die Bibliothek everit-org/json-schema verwendet, die eine einfache Möglichkeit bietet, JSON-Daten gegen ein JSON Schema zu validieren.
Schritt 1: Abhängigkeiten hinzufügen
Zuerst müssen Sie die erforderlichen Bibliotheken zu Ihrem Projekt hinzufügen.