1. Was ist JSON (JavaScript Object Notation)?
JSON (wird „Dschäson“ ausgesprochen, nicht „Schäson“!) steht für JavaScript Object Notation. Trotz des Wortes „JavaScript“ im Namen ist JSON ein universelles Format, das von nahezu allen Programmiersprachen unterstützt wird, einschließlich Java.
JSON wurde Anfang der 2000er von Douglas Crockford als einfache Methode für den Datenaustausch zwischen Browser und Server entwickelt. Davor dominierte XML – wortreich und mit vielen Tags überladen.
JSON erwies sich als kompakter, einfacher und leicht „mit den Augen“ lesbar. Es wurde schnell zum De-facto-Standard für den Datenaustausch zwischen Client und Server, insbesondere im Web und in mobilen Anwendungen.
Warum wurde JSON zum Standard?
- Einfache Syntax – lässt sich per Hand leicht schreiben und lesen.
- Kompaktheit – keine überflüssigen Tags und Füllwörter.
- Gute Lesbarkeit – selbst ein Laie versteht, was passiert.
- Leicht zu parsen – die meisten Sprachen bieten eingebaute oder Third-Party-Bibliotheken.
- Sprachübergreifend – Java, Python, Kotlin usw. – JSON wird von allen unterstützt.
- Standard für REST-APIs – die überwältigende Mehrheit der APIs liefert JSON zurück.
Vergleich mit XML
| JSON | XML | |
|---|---|---|
| Lesbarkeit | Sehr hoch | Mittel (viele Tags) |
| Größe | Kompakt | Umfangreicher |
| Parsing | Einfach | Erfordert mehr Aufwand |
| Erweiterbarkeit | Unterstützt Verschachtelung | Unterstützt Verschachtelung |
| Formalisierung | Weniger formal | Schemata können beschrieben werden |
| Popularität (2020+) | Sehr hoch | Wird verwendet, aber seltener |
JSON gewinnt fast in allen Punkten. Dennoch bleibt XML dort relevant, wo komplexe Schemata, strenge Typisierung, Validierung per XSD sowie Unterstützung für Kommentare und Attribute erforderlich sind – zum Beispiel in Altsystemen und im Bankwesen.
In der Praxis gilt: Wenn Sie keine Software für eine Bank oder ein Raumschiff schreiben – verwenden Sie JSON.
2. Grundlegende JSON-Syntax
Wenn Sie mit JavaScript-Objekten oder Dictionaries in anderen Sprachen gearbeitet haben, kommt Ihnen die Syntax bekannt vor. In Java gibt es kein direktes „Dictionary“, diese Rolle übernehmen Kollektionen aus java.util, in erster Linie Map<K, V> (meistens HashMap<K, V>).
Basiselemente
- Objekte – eine Menge von „Schlüssel: Wert“-Paaren, eingeschlossen in { }.
- Arrays – geordnete Wertelisten, eingeschlossen in [ ].
Beispiel eines Objekts:
{
"name": "Alice",
"age": 25
}
Beispiel eines Arrays:
[1, 2, 3, 4, 5]
Beispiel eines Objekts mit Array:
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Zulässige Wertetypen
In JSON sind nur die folgenden Datentypen zulässig:
| Typ | Beispiel | Beschreibung |
|---|---|---|
| String | |
Immer in doppelten Anführungszeichen |
| Zahl | |
Ganz- und Gleitkommazahlen |
| Boolean | |
Logische Werte |
| null | |
„Leer“, fehlender Wert |
| Objekt | |
Menge von „Schlüssel: Wert“-Paaren |
| Array | |
Liste von Werten |
Achtung: Schlüssel in Objekten sind immer Strings in doppelten Anführungszeichen, zum Beispiel "name". Einfache Anführungszeichen sind nicht zulässig.
Beispiele für gültiges JSON
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Beispiel für ungültiges JSON (Fehler)
{
name: 'Bob', // Fehler: Schlüssel und Strings — nur in doppelten Anführungszeichen!
age: 25,
}
3. Datenstruktur: Verschachtelung von Objekten und Arrays
JSON unterstützt tiefe Verschachtelung: Objekte in Objekten, Arrays in Objekten, Objekte in Arrays usw. Das ist wie eine Matrjoschka.
Beispiel eines komplexen JSON-Dokuments
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
Im Wurzelobjekt gibt es ein String-Feld "university", ein boolesches Feld "active" und ein Array "students", in dem die Objekte der Studierenden liegen.
Visuelles Schema (Blockdiagramm)
{
"Schlüssel": Wert,
"Array": [
{ "Schlüssel": Wert },
{ "Schlüssel": Wert }
],
"Objekt": {
"Schlüssel": Wert
}
}
4. Vorteile von JSON
Warum ist JSON so beliebt?
- Leicht für Menschen und Maschinen lesbar – die Struktur ist leicht zu verstehen.
- Kompaktheit – minimaler Overhead.
- Einfaches Parsing – zahlreiche Bibliotheken zum Lesen/Schreiben.
- Standard für REST-APIs und mobile Apps – wird allgegenwärtig verwendet.
- Flexibilität – beschreibt sowohl einfache Listen als auch Baumstrukturen.
- Konfigurationen, Einstellungen, Datenspeicherung – häufig in Konfigurationsdateien verwendet.
- Von allen Sprachen unterstützt – Java, Python, Go, Rust u. a.
5. Praxis: Analyse von JSON-Dateibeispielen
Beispiel 1: Liste von Benutzern
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
Dies ist ein Array, in dem jedes Element ein Benutzerobjekt ist.
Beispiel 2: Anwendungskonfiguration
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
Ein Objekt mit einem verschachtelten Objekt "database". Sehr ähnlich zu realen Anwendungseinstellungen.
Beispiel 3: Fehler in JSON
{
"name": "Alice",
"age": 25,
} // Fehler: überflüssiges Komma vor der schließenden Klammer!
Merken: In JSON darf kein Komma nach dem letzten Element stehen.
Beispiel 4: Schlüssel ohne Anführungszeichen
{ name: "Alice", age: 25 } // Fehler: Schlüssel müssen in doppelten Anführungszeichen stehen!
6. Nützliche Feinheiten
Tabelle: Was in JSON erlaubt ist und was nicht
| Erlaubt | Nicht erlaubt |
|---|---|
|
|
|
|
|
|
|
|
|
|
Kurzer Vergleich von JSON und Java-Objekten
| Java | JSON |
|---|---|
|
Zahl, true/false |
|
„Zeichenkette“ |
| List<T>, Array | [Wert1, Wert2, ...] |
|
{ "Schlüssel": Wert, ... } |
|
null |
| Klasse mit Feldern | { "Feld": Wert, ... } |
Beispiel: Java-Klasse und ihre JSON-Darstellung
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. Typische Fehler im Umgang mit JSON
Fehler Nr. 1: Einfache Anführungszeichen statt doppelter. JSON akzeptiert nur doppelte Anführungszeichen für Schlüssel und Strings.
{ 'name': 'Alice' } // Fehler!
Fehler Nr. 2: Überflüssiges Komma. Nach dem letzten Element darf kein Komma stehen.
{ "name": "Alice", } // Fehler!
Fehler Nr. 3: Schlüssel ohne Anführungszeichen. Schlüssel müssen stets in doppelten Anführungszeichen stehen.
{ name: "Alice" } // Fehler!
Fehler Nr. 4: Zahlen mit führenden Nullen. Solche Zahlen sind unzulässig.
{ "age": 025 } // Fehler!
Fehler Nr. 5: Verwendung von undefined. In JSON gibt es kein undefined; verwenden Sie null.
{ "value": undefined } // Fehler!
Fehler Nr. 6: True/False großgeschrieben. In JSON sind nur true und false (kleingeschrieben) erlaubt.
{ "active": True } // Fehler!
GO TO FULL VERSION