JSON

13 tools

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 einfach zu parsen und zu generieren ist. Ursprünglich aus JavaScript abgeleitet, ist JSON sprachunabhängig und gilt heute als De-facto-Standard für den Datenaustausch im Web.

JSON stellt Daten als Schlüssel-Wert-Paare dar, die in Objekten und Arrays organisiert sind. Seine Einfachheit machte es zum dominierenden Format für REST-APIs, Konfigurationsdateien und Datenspeicherung.

Eine kurze Geschichte

JSON wurde von Douglas Crockford Anfang der 2000er Jahre formalisiert. Die Spezifikation wurde 2001 auf json.org veröffentlicht. RFC 4627 folgte 2006, und der aktuelle ECMA-404-Standard wurde 2013 veröffentlicht.

Vor JSON war XML das dominante Datenaustauschformat im Web. JSONs Minimalismus — keine Attribute, keine Verarbeitungsanweisungen, keine Namensräume — machte es sofort populär. Bis 2010 hatte JSON XML bei Web-APIs weitgehend verdrängt.

JSON-Datentypen

JSON unterstützt genau sechs Datentypen. Jeder Wert in einem gültigen JSON-Dokument muss einer dieser sein:

String"hello world"

Beliebige Unicode-Zeichenfolge in doppelten Anführungszeichen. Escape-Sequenzen mit Backslash (\n, \t, \") werden unterstützt.

Number42 / 3.14 / 1e10

Ganzzahl oder Gleitkommazahl. Wissenschaftliche Notation (1e10) ist erlaubt. Kein Unterschied zwischen int und float auf JSON-Ebene.

Booleantrue / false

Die Literaltokens true oder false (nur Kleinbuchstaben). Kein truthy/falsy — nur striktes Boolean.

Nullnull

Das Literaltoken null (Kleinbuchstaben). Stellt das Fehlen eines Wertes dar. Anders als undefined, was kein JSON-Typ ist.

Array[1, "two", null]

Eine geordnete Liste von Werten in eckigen Klammern. Elemente können gemischte Typen haben und Arrays können beliebig verschachtelt werden.

Object{"key": "value"}

Eine ungeordnete Sammlung von Schlüssel-Wert-Paaren in geschweiften Klammern. Schlüssel müssen Strings sein.

{
  "string":  "hello world",
  "number":  42,
  "float":   3.14,
  "boolean": true,
  "null":    null,
  "array":   [1, 2, 3],
  "object":  { "nested": "value" }
}

JSON-Syntaxregeln

JSON hat strenge Syntaxregeln. Eine kleine Abweichung verursacht einen Parse-Fehler. Diese sechs Regeln sind am wichtigsten:

Nur doppelte Anführungszeichen bei Strings

Alle String-Werte und Objektschlüssel müssen doppelte Anführungszeichen verwenden. Einfache Anführungszeichen sind kein gültiges JSON.

Keine abschließenden Kommas

JSON erlaubt keine abschließenden Kommas nach dem letzten Element in einem Array oder der letzten Eigenschaft in einem Objekt.

Keine Kommentare

JSON hat keine Kommentarsyntax. // und /* */ sind nicht gültig. Für Konfigurationsdateien, die Kommentare benötigen, sollte JSON5 oder YAML verwendet werden.

Kein undefined oder Funktionen

JSON unterstützt nur sechs primitive Typen. JavaScript-Werte wie undefined, NaN, Infinity und Funktionen können nicht dargestellt werden.

Objektschlüssel müssen Strings sein

Alle Objektschlüssel müssen in Anführungszeichen stehende Strings sein. Numerische Schlüssel oder Bezeichner ohne Anführungszeichen sind nicht erlaubt.

Groß-/Kleinschreibung beachten

JSON unterscheidet Groß- und Kleinschreibung. true, false und null müssen ausschließlich in Kleinbuchstaben geschrieben werden.

Ungültiges vs. gültiges JSON

Ungültig
{
  'name': 'Alice',       // single quotes — invalid
  age: 30,              // unquoted key — invalid
  "scores": [1, 2, 3,], // trailing comma — invalid
  "note": undefined     // undefined — invalid
}
Gültig
{
  "name": "Alice",
  "age": 30,
  "scores": [1, 2, 3],
  "note": null
}

JSON im modernen Web

REST-APIs

JSON ist das Standard-Body-Format für REST-API-Anfragen und -Antworten. Content-Type: application/json ist der häufigste MIME-Typ im modernen Web.

Konfigurationsdateien

package.json, tsconfig.json, .eslintrc und viele andere Entwicklertools verwenden JSON für die Konfiguration.

NoSQL-Datenbanken

Dokumentdatenbanken wie MongoDB, CouchDB und Amazon DynamoDB speichern Daten als JSON-Dokumente.

Frontend-Zustand und Daten

localStorage und sessionStorage speichern Strings, daher werden JSON.stringify/JSON.parse ständig zur Serialisierung von JavaScript-Objekten verwendet.

JSON vs. andere Formate

JSON ist nicht immer die beste Wahl. So schneidet es im Vergleich zu anderen gängigen Datenformaten ab:

JSON vs XML
JSON-Vorteile gegenüber XML

Einfachere Syntax, kleinere Dateigröße, einfacher zu parsen, lesbarer

JSON-Nachteile gegenüber XML

Kein Support für Attribute, Verarbeitungsanweisungen oder XML-Namespaces

Wähle XML wenn

Dokumentmetadaten, gemischte Inhaltsmodelle oder XML-Schemata benötigt werden

JSON vs YAML
JSON-Vorteile gegenüber YAML

Strengere Syntax (weniger Mehrdeutigkeit), besserer Tooling-Support, portabler

JSON-Nachteile gegenüber YAML

Kein Kommentar-Support, etwas ausführlicher bei tief verschachtelten Daten

Wähle YAML wenn

Von Menschen bearbeitete Konfigurationsdateien, Docker Compose, GitHub Actions, Kubernetes

JSON vs TOML
JSON-Vorteile gegenüber TOML

Breitere Ökosystem-Unterstützung, schnelleres Parsing, vorhersehbareres Typhandling

JSON-Nachteile gegenüber TOML

Kein nativer Datumstyp, weniger benutzerfreundlich für komplexe verschachtelte Strukturen

Wähle TOML wenn

Rust (Cargo.toml), Python (pyproject.toml), INI-Anwendungskonfiguration

JSON vs CSV
JSON-Vorteile gegenüber CSV

Strukturierte und verschachtelte Daten, nicht auf flache Zeilen und Spalten beschränkt

JSON-Nachteile gegenüber CSV

Viel größere Dateigröße, schlechtere Performance für rein tabellarische Daten

Wähle CSV wenn

Tabellendaten, Datenbankexporte, Daten für Excel oder pandas

JSON Schema

JSON Schema ist ein Vokabular zur Validierung der Struktur von JSON-Dokumenten. Ein Schema beschreibt die erwarteten Typen, Pflichtfelder und Einschränkungen eines JSON-Wertes.

Tools wie ajv (JavaScript), jsonschema (Python) und integrierte Validatoren in vielen IDEs unterstützen JSON Schema. OpenAPI verwendet JSON Schema zur Beschreibung von API-Request- und Response-Bodies.

Häufige JSON-Fallstricke

Genauigkeitsverlust bei Zahlen

JSON-Zahlen werden als IEEE 754 Double-Precision-Floats geparst. Ganzzahlen größer als 2^53 verlieren an Genauigkeit. Große IDs als Strings übergeben.

Kein Datumstyp

JSON hat keinen Datumstyp. Datumsangaben werden typischerweise als ISO 8601-Strings oder Unix-Timestamps serialisiert.

Zirkuläre Referenzen bringen Serialisierer zum Absturz

JSON.stringify wirft einen TypeError bei zirkulären Objektreferenzen. Der Zyklus muss unterbrochen oder eine Bibliothek verwendet werden.

Unicode- und BOM-Probleme

JSON muss als UTF-8, UTF-16 oder UTF-32 kodiert werden. Eine Byte-Order-Mark (BOM) am Anfang einer JSON-Datei ist nicht spezifikationskonform.

Prototype Pollution

Beim Parsen von nicht vertrauenswürdigem JSON kann das Zusammenführen von geparsten Objekten über den __proto__-Schlüssel anfällig für Prototype-Pollution-Angriffe sein.

Null vs. fehlender Schlüssel

{"key": null} und ein fehlender "key" sind semantisch verschieden. Null bedeutet, das Feld existiert mit einem fehlenden Wert; fehlend bedeutet, das Feld wurde nicht angegeben.

Häufig gestellte Fragen

Wofür steht JSON?

JSON steht für JavaScript Object Notation. Trotz des Namens ist JSON vollständig sprachunabhängig.

Ist JSON dasselbe wie ein JavaScript-Objekt?

Nein. JSON ist ein Textformat, das einem JavaScript-Objektliteral ähnelt, aber strengere Regeln hat: Schlüssel müssen in doppelten Anführungszeichen stehen, und undefined, Funktionen oder Kommentare werden nicht unterstützt.

Kann JSON Kommentare haben?

Nein. Die JSON-Spezifikation enthält keine Kommentarsyntax. Für Konfigurationsdateien mit Kommentaren sollte JSONC, JSON5 oder YAML verwendet werden.

Was ist der Unterschied zwischen JSON und JSONP?

JSONP war ein Workaround für die Same-Origin-Policy des Browsers und ist veraltet. CORS sollte stattdessen verwendet werden.

Wie formatiere ich JSON lesbar?

In JavaScript: JSON.stringify(data, null, 2). In Python: json.dumps(data, indent=2). Im Terminal: cat file.json | jq .

Was ist NDJSON oder JSON Lines?

NDJSON speichert ein JSON-Objekt pro Zeile. Es ermöglicht Stream-Verarbeitung und ist beliebt für Log-Dateien und große Datenexporte.

Spielt Leerzeichen in JSON eine Rolle?

Leerzeichen zwischen Tokens sind bedeutungslos. Formatierung ist eine Stilfrage, keine Semantik.

Was ist die maximale Größe einer JSON-Datei?

Die JSON-Spezifikation legt keine Größenbeschränkung fest. In der Praxis ist man durch den Parser-Speicher und die Netzwerkübertragung begrenzt.

Kann JSON Binärdaten darstellen?

Nicht direkt. Binärdaten müssen Base64-kodiert werden, bevor sie in JSON eingebettet werden, was die Größe um ~33% erhöht.

Was ist JSON5?

JSON5 ist eine Obermenge von JSON, die hinzufügt: Schlüssel ohne Anführungszeichen, Strings in einfachen Anführungszeichen, abschließende Kommas, Kommentare und mehrzeilige Strings.