Was ist JSON?
JSON (JavaScript Object Notation) ist ein leichtgewichtiges, textbasiertes Datenaustauschformat, das für Menschen leicht zu lesen und zu schreiben sowie für Maschinen leicht zu analysieren und zu generieren ist. Obwohl es aus der JavaScript-Syntax abgeleitet wurde, ist JSON sprachunabhängig – nahezu jede moderne Programmiersprache verfügt über Bibliotheken zum Parsen und Erzeugen von JSON.
JSON wurde Anfang der 2000er Jahre von Douglas Crockford als einfachere Alternative zu XML für den Datenaustausch im Web eingeführt. Heute ist es das dominierende Format für REST APIs, Konfigurationsdateien, Datenbanken wie MongoDB und vieles mehr.
JSON-Syntax: Das vollständige Bild
Ein JSON-Wert ist eines der folgenden:
- Objekt:
{ "schluessel": wert, ... }— eine ungeordnete Sammlung von Schlüssel-Wert-Paaren - Array:
[ wert, ... ]— eine geordnete Liste von Werten - Zeichenkette:
"hallo welt"— muss doppelte Anführungszeichen verwenden - Zahl:
42,3.14,-7,1.5e10— kein Unterschied zwischen ganzen und Dezimalzahlen - Wahrheitswert:
trueoderfalse - Null:
null
{
"name": "Alice",
"alter": 30,
"aktiv": true,
"punkte": [95, 87, 100],
"adresse": {
"stadt": "Berlin",
"postleitzahl": "10115"
},
"notizen": null
}
Häufige Syntaxfehler
| Fehler | Falsch | Richtig |
|---|---|---|
| Abschließendes Komma | { "a": 1, } |
{ "a": 1 } |
| Einfache Anführungszeichen | { 'key': 'val' } |
{ "key": "val" } |
| Schlüssel ohne Anführungszeichen | { key: "val" } |
{ "key": "val" } |
| Kommentare | { // Kommentar } |
(nicht unterstützt) |
| Undefined | { "a": undefined } |
null verwenden oder Schlüssel weglassen |
Eine kurze Geschichte von JSON
- 2001: Douglas Crockford beginnt, JSON als zustandsloses Server-Browser-Kommunikationsprotokoll zu fördern
- 2006: Die IETF veröffentlicht RFC 4627, die erste formale JSON-Spezifikation
- 2013: ECMA International formalisiert JSON als ECMA-404
- 2017: RFC 8259 ersetzt alle vorherigen RFCs und wird zum definitiven Standard
Vor JSON dominierte XML die API-Kommunikation. JSONs Kürze und die natürliche Passung mit JavaScript-Objekten machten es in der Web-2.0-Ära zu einem überwältigenden Erfolg – eine Entwicklung, die sich seitdem nur noch beschleunigt hat.
Wo JSON eingesetzt wird
REST APIs
Fast jede REST API gibt heute JSON zurück. Eine Anfrage an eine Wetter-API könnte so aussehen:
{
"ort": "Berlin",
"temperatur": 22.4,
"einheit": "celsius",
"bedingungen": ["bewölkt", "feucht"],
"vorhersage": [
{ "tag": "Montag", "hoch": 24, "tief": 18 },
{ "tag": "Dienstag", "hoch": 21, "tief": 16 }
]
}
Konfigurationsdateien
Werkzeuge wie ESLint (.eslintrc.json), TypeScript (tsconfig.json) und npm (package.json) verwenden alle JSON für ihre Konfiguration.
NoSQL-Datenbanken
MongoDB speichert Dokumente im BSON-Format (Binary JSON). CouchDB, Firebase Firestore und DynamoDB verwenden alle JSON-ähnliche Dokumentmodelle.
Lokaler Speicher und Cookies
Da der localStorage des Browsers nur Zeichenketten speichert, verwenden Entwickler häufig JSON.stringify() vor dem Speichern und JSON.parse() beim Abrufen.
Logging und Observability
Strukturiertes Logging in JSON erleichtert die Abfrage von Logs mit Tools wie Elasticsearch, Datadog oder Loki erheblich.
JSON-Parsing in der Praxis
JavaScript / TypeScript
// Zeichenkette in Objekt umwandeln
const daten = JSON.parse('{"name":"Alice","alter":30}');
console.log(daten.name); // "Alice"
// Objekt in Zeichenkette serialisieren
const json = JSON.stringify({ name: "Alice", alter: 30 }, null, 2);
Das optionale Argument null, 2 bei JSON.stringify aktiviert die lesbare Ausgabe mit 2 Leerzeichen Einrückung – unverzichtbar beim Debuggen.
Python
import json
# Parsen
daten = json.loads('{"name": "Alice", "alter": 30}')
print(daten["name"]) # Alice
# Serialisieren
text = json.dumps({"name": "Alice", "alter": 30}, indent=2)
Go
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Alter int `json:"alter"`
}
func main() {
var p Person
json.Unmarshal([]byte(`{"name":"Alice","alter":30}`), &p)
fmt.Println(p.Name)
}
Fortgeschrittene Themen
JSON Schema
JSON Schema ist ein Vokabular zur Validierung der Struktur von JSON-Daten. Es ermöglicht die Definition von Pflichtfeldern, Werttypen, Mustern und Einschränkungen:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": { "type": "string" },
"alter": { "type": "integer", "minimum": 0 }
},
"required": ["name", "alter"]
}
JSON Pointer (RFC 6901)
JSON Pointer bietet eine Zeichenkettensyntax zur Identifizierung eines bestimmten Werts in einem JSON-Dokument:
/name→ das Feldname/punkte/0→ erstes Element des Arrayspunkte
JSON Patch (RFC 6902)
JSON Patch definiert ein Format zur Beschreibung einer Folge von Operationen, die auf ein JSON-Dokument angewendet werden sollen – nützlich für inkrementelle Updates in APIs.
Leistungsüberlegungen
- Größe: JSON ist textbasiert und ausführlich. Für Hochleistungssysteme sollten Sie binäre Alternativen wie MessagePack oder Protocol Buffers in Betracht ziehen.
- Parsing-Geschwindigkeit: Moderne JSON-Parser (wie simdjson) können Gigabytes pro Sekunde verarbeiten, aber für die meisten Webanwendungen ist JSON-Parsing kein Engpass.
- Tief verschachtelte Strukturen: Sehr tiefe Verschachtelungen können bei rekursiven Parsern zu Stack-Overflow-Fehlern führen. Halten Sie Strukturen möglichst flach.
JSON vs. XML vs. YAML
| Merkmal | JSON | XML | YAML |
|---|---|---|---|
| Lesbarkeit | Gut | Ausführlich | Ausgezeichnet |
| Kommentare | ❌ | ✅ | ✅ |
| Binärunterstützung | ❌ (benötigt base64) | ❌ | ❌ |
| Schema-Validierung | JSON Schema | XSD | ❌ (begrenzt) |
| Am besten für | APIs, Konfig, Speicher | Dokumente, Legacy | Konfigurationsdateien |
Best Practices
- Bei der Eingabe validieren: Vertrauen Sie eingehendem JSON niemals blind – validieren Sie es immer gegen ein Schema oder prüfen Sie die erwarteten Felder.
nullbewusst einsetzen: Unterscheiden Sie zwischen „Feld fehlt" und „Feld ist explizit null".- Tiefe Verschachtelungen vermeiden: Flache Daten sind einfacher zu handhaben. Verwenden Sie IDs, um verwandte Objekte zu verknüpfen.
- Einheitliche Schlüsselbenennung: Wählen Sie eine Konvention (camelCase, snake_case) und halten Sie diese in Ihrer gesamten API ein.
- Datumsangaben als ISO-8601-Zeichenketten: JSON hat keinen Datumstyp. Verwenden Sie das Format
"2025-04-09T00:00:00Z"für Interoperabilität. - Für Produktion minimieren, zum Debuggen formatieren: Verwenden Sie kompaktes JSON in API-Antworten, um Bandbreite zu sparen; nutzen Sie lesbares Format lokal.
Zusammenfassung
JSON ist aus gutem Grund zur universellen Sprache des Datenaustauchs im Web geworden: Es ist einfach, lesbar und überall unterstützt. Das Verständnis seiner Syntax, Einschränkungen und Best Practices macht Sie zu einem effektiveren Entwickler – egal ob Sie APIs bauen, Konfigurationsdateien schreiben oder Datenpipelines verarbeiten.