Wenn du seit mehr als einer Woche Code schreibst, bist du mit ziemlicher Sicherheit schon über JSON gestolpert. Es taucht überall auf — REST-API-Antworten, Config-Dateien, Datenbankdokumente, Browser-Storage, Logs. Aber was genau ist es, und warum wurde es zum Format, das das Web gefressen hat?
JSON steht für JavaScript Object Notation. Trotz des Namens ist es komplett sprachunabhängig und hat Bibliotheken in jeder wichtigen Programmiersprache. Douglas Crockford hat es Anfang der 2000er als einfachere Alternative zu XML für die Kommunikation zwischen Browser und Server formalisiert. Die Spezifikation ist außerdem als ECMA-404 standardisiert, und sie ist so klein, dass sie auf eine Visitenkarte passt — was ein Teil des Grundes ist, warum sie sich durchgesetzt hat.
Wie sieht JSON eigentlich aus?
Hier ist ein JSON-Snippet, das ein User-Objekt repräsentiert. Dieses eine Beispiel deckt alle sechs Datentypen ab, die JSON unterstützt:
{
"name": "Alice",
"age": 30,
"score": 98.5,
"active": true,
"nickname": null,
"tags": ["developer", "blogger"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}Die sechs JSON-Datentypen
JSON unterstützt genau sechs Wertetypen. Mehr nicht. Diese Schlichtheit ist ein Feature — du kannst das gesamte Format an einem Nachmittag lernen.
{
"string": "Hello, world",
"integer": 42,
"float": 3.14159,
"boolean": true,
"nothing": null,
"array": [1, "two", false, null],
"object": { "nested": true }
}- String — Jeder Text in doppelten Anführungszeichen.
"hello","2024-01-01",""sind alles gültige Strings. - Number — Ganzzahl oder Fließkommazahl. Keine Unterscheidung zwischen int und float. Hinweis:
NaNundInfinitysind keine gültigen JSON-Zahlen. - Boolean —
trueoderfalse, nur kleingeschrieben. - Null — Steht für "kein Wert". Nützlich für optionale Felder, die noch nicht gesetzt wurden.
- Array — Eine geordnete Liste von Werten. Typen dürfen gemischt werden:
[1, "two", true, null]ist völlig okay. - Object — Eine Sammlung von Schlüssel-Wert-Paaren. Schlüssel müssen Strings in doppelten Anführungszeichen sein.
Eine echte API-Antwort
So könnte eine echte REST-API-Antwort aussehen, wenn du GET /api/users/42 aufrufst.
Beachte, wie Objekte und Arrays verschachtelt werden, um reichhaltigere Daten darzustellen:
{
"id": 42,
"username": "alice_dev",
"email": "[email protected]",
"createdAt": "2023-06-15T09:30:00Z",
"preferences": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"roles": ["user", "editor"],
"lastLogin": "2024-01-10T14:22:00Z",
"stats": {
"postsPublished": 27,
"commentsWritten": 154,
"likesReceived": 489
}
}Du könntest auf alice_devs Theme-Einstellung in JavaScript mit
user.preferences.theme zugreifen oder ihre erste Rolle mit user.roles[0] holen.
Genau dieses natürliche Mapping auf die Primitiven der Sprache ist der Grund, warum sich JSON so mühelos anfühlt.
JSON-Syntaxregeln — die Stolpersteine, über die jeder fällt
JSON sieht einfach aus, hat aber ein paar strenge Regeln. Mach eine davon falsch und dein ganzer Payload lässt sich nicht parsen. Das sind die Fehler, die ich am häufigsten sehe:
- Schlüssel müssen in doppelten Anführungszeichen stehen.
{"name": "Alice"}ist gültig.{name: "Alice"}nicht. Das bringt Entwickler durcheinander, die aus JavaScript kommen, wo Objekt-Schlüssel ohne Anführungszeichen okay sind. - Keine Trailing Commas.
{"a": 1, "b": 2,}wirft einen Parse-Error. JavaScript ist hier nachsichtig; die JSON-Spec nicht. - Keine Kommentare.
//- oder/* */-Kommentare gibt es in JSON nicht. Wenn du Config-Dateien mit Kommentaren brauchst, schau dir lieber YAML oder TOML an. - Kein
undefined. JavaScriptsundefinedexistiert in JSON nicht. Nimmnullfür fehlende Werte. - Strings müssen doppelte Anführungszeichen verwenden. Einfach gequotete Strings wie
{'key': 'value'}sind ungültiges JSON. - Keine führenden Nullen.
042ist ungültig.42oder0.42sind in Ordnung.
Warum JSON das Web erobert hat
Vor JSON war XML König. Eine typische XML-API-Antwort war geschwätzig, brauchte einen richtigen XML-Parser, und fühlte sich an, als würde man gegen die Sprache arbeiten. JSON konnte vom eingebauten JSON.parse() von JavaScript geparst werden — keine Libraries nötig. Es war kleiner auf der Leitung, auf einen Blick lesbar und ließ sich direkt auf die Objekte und Arrays abbilden, die Entwickler ohnehin täglich nutzten.
Ende der 2000er fingen die meisten öffentlichen APIs an, JSON neben XML anzubieten. Anfang der 2010er haben viele den XML-Support komplett fallen gelassen. Heute ist die Standardannahme für jede REST-API JSON. Sogar GraphQL, das REST in vielen Kontexten abgelöst hat, verwendet weiterhin JSON als Antwortformat.
JSON wird auch dadurch definiert, was es nicht unterstützt
Manche Einschränkungen von JSON sind bewusste Designentscheidungen, die es einfach und interoperabel halten:
- Kein Datumstyp. Daten sind einfach Strings. Die Konvention ist das ISO 8601-Format:
"2024-01-15T09:30:00Z". - Keine Binärdaten. Dateien und Bilder werden typischerweise Base64-kodiert in einen String gepackt.
- Keine Funktionswerte.
{"fn": function(){} }ist ungültig. JSON ist pure Daten, niemals Code. - Keine doppelten Schlüssel. Technisch von der Spec erlaubt, aber das Verhalten ist undefiniert. In der Praxis nehmen Parser den letzten Wert.
Nützliche Tools für die Arbeit mit JSON
Hier sind ein paar Tools, zu denen du ständig greifen wirst, wenn du mit JSON arbeitest: JSON Formatter zum hübschen Ausgeben minifizierter Antworten, JSON Validator zum Finden von Syntaxfehlern, JSON Minifier zum Komprimieren von JSON für Production, und JSON Path zum Abfragen tief verschachtelter Daten, ohne Schleifen zu schreiben.
Die offizielle Spec lebt auf json.org und ist wirklich lesenswert — es dauert etwa 10 Minuten und du verstehst das Format komplett. Die formelle IETF-Spec ist RFC 8259, falls du mal eine Debatte schlichten musst.
Abschluss
JSON ist ein leichtgewichtiges, menschenlesbares Datenformat, das auf sechs Wertetypen aufbaut: Strings, Zahlen, Booleans, Null, Arrays und Objekten. Es hat strenge Syntaxregeln, aber keine Überraschungen, sobald du sie kennst. Der Grund, warum es allgegenwärtig wurde, liegt nicht daran, dass es das mächtigste Format ist — sondern daran, dass es das einfachste ist, das 95 % der realen Datenanforderungen abdeckt. Wenn du irgendetwas Webbezogenes baust, ist es nicht optional, JSON zu verstehen. Es ist fundamental.