Was ist JSON? Aufbau, Datentypen und Beispiele

JSON (JavaScript Object Notation) ist ein textbasiertes Format, um strukturierte Daten zu speichern und zwischen Programmen auszutauschen. Es besteht aus verschachtelten Objekten (Schlüssel-Wert-Paaren) und Listen, ist für Menschen lesbar und lässt sich in praktisch jeder Programmiersprache einlesen. Du begegnest dem JSON-Format vor allem in Web-APIs, Konfigurationsdateien und Datenexporten.

Wenn du ein JSON-Dokument prüfen oder lesbar machen willst, füge es in den JSON-Formatierer ein. Er rückt es sauber ein, meldet Fehler mit Zeile und Spalte auf Deutsch und verarbeitet alles lokal in deinem Browser. Es wird nichts an einen Server gesendet.

Herkunft und Standards

JSON wurde Anfang der 2000er-Jahre von Douglas Crockford bekannt gemacht und beschrieben, auf json.org. Die Idee: Die Schreibweise für Objekte und Listen in JavaScript war schon da und einfach genug, um sie als sprachunabhängiges Austauschformat zu nutzen. Gegenüber XML kommt JSON mit deutlich weniger Zeichen aus.

Heute ist JSON in zwei Dokumenten festgelegt, die inhaltlich übereinstimmen:

  • ECMA-404 („The JSON Data Interchange Syntax“) beschreibt nur die Syntax.
  • RFC 8259 (IETF, 2017) beschreibt zusätzlich, wie JSON im Internet ausgetauscht wird. Er löste RFC 7159 ab. Danach muss JSON-Text, der zwischen Systemen ausgetauscht wird, in UTF-8 kodiert sein.

Seit RFC 7159 darf ein JSON-Dokument auch aus einem einzelnen Wert bestehen, etwa nur 42 oder "Hallo". Nicht jedes ältere Programm akzeptiert das, in der Praxis ist die Wurzel aber fast immer ein Objekt oder eine Liste.

Die sechs Werttypen

Jeder Wert in JSON ist genau einer von sechs Typen:

Typ Beispiel Hinweis
Objekt {"name": "Ada"} Schlüssel-Wert-Paare in geschweiften Klammern; Schlüssel sind immer Texte
Array (Liste) [1, 2, 3] geordnete Werte in eckigen Klammern, beliebig gemischt
String (Text) "Straße" immer in doppelten Anführungszeichen, Unicode erlaubt
Zahl 42, -1.5, 2.5e3 dezimal, ohne Unterscheidung zwischen ganzen und Kommazahlen
Boolean true, false klein geschrieben
Null null „kein Wert“, klein geschrieben

Objekte und Arrays dürfen beliebig ineinander verschachtelt werden. Mehr gibt es nicht: keine Datumstypen, keine Binärdaten, keine Funktionen. Ein Datum speicherst du üblicherweise als Text im ISO-Format, etwa "2026-10-04".

Der Standard legt für Zahlen keine Größe oder Genauigkeit fest. Viele Programme lesen sie als 64-Bit-Fließkommazahl, dann gehen sehr große Ganzzahlen ungenau ein. Der JSON-Formatierer ändert Zahlen beim Formatieren nicht, er behält sie Zeichen für Zeichen bei. Warum dabei zum Beispiel IDs falsch werden, erklärt der Ratgeber Große Zahlen in JSON.

Die strengen Regeln

JSON ist bewusst kleiner und strenger als JavaScript. Diese Regeln musst du einhalten:

  1. Doppelte Anführungszeichen für alle Texte und für alle Schlüssel. Einfache Anführungszeichen sind ungültig.
  2. Kein Komma nach dem letzten Eintrag eines Objekts oder einer Liste (siehe Komma am Ende).
  3. Keine Kommentare, weder // noch /* … */ (siehe Kommentare in JSON).
  4. Kein NaN und kein Infinity. Verwende null oder einen Text.
  5. Kein undefined. Den Wert gibt es in JSON nicht.
  6. Zahlen ohne führende Null, ohne führendes Plus und mit Ziffern vor und nach dem Dezimalpunkt.
  7. Sonderzeichen in Texten mit Backslash maskieren (\", \\, \n), Zeilenumbrüche nicht direkt in Texte schreiben.

Ein typischer Verstoß sieht so aus:

{
  // Benutzer
  'name': 'Ada',
  "alter": NaN,
}

Gültig ist dasselbe so:

{
  "name": "Ada",
  "alter": null
}

Wenn dir ein Parser einen Fehler meldet, hilft der Ratgeber JSON-Fehler finden und beheben.

Ein vollständiges Beispiel

Das folgende Dokument nutzt alle sechs Typen. Die Erklärungen stehen unter dem Code, denn Kommentare im JSON selbst wären ungültig.

{
  "id": 1042,
  "name": "Ada Lovelace",
  "aktiv": true,
  "spitzname": null,
  "kontostand": 1250.75,
  "rollen": ["admin", "autor"],
  "adresse": {
    "ort": "London",
    "plz": "01067"
  },
  "bestellungen": [
    { "nr": "A-1", "betrag": 19.9 },
    { "nr": "A-2", "betrag": 5 }
  ]
}
  • Das ganze Dokument ist ein Objekt ({ … }) mit acht Schlüsseln.
  • id und kontostand sind Zahlen, name ist ein String.
  • aktiv ist ein Boolean, spitzname ist null (bewusst leer).
  • rollen ist ein Array aus Strings.
  • adresse ist ein verschachteltes Objekt. Die Postleitzahl steht als String, weil sonst die führende Null verloren ginge.
  • bestellungen ist ein Array aus Objekten, ein sehr verbreitetes Muster.

Wofür JSON verwendet wird

  • Web-APIs: Server und Browser, Apps und Dienste tauschen Daten fast immer als JSON aus. Eine Antwort wird mit dem MIME-Type application/json ausgeliefert. Für diesen Typ ist kein charset-Parameter definiert, die Kodierung ist UTF-8.
  • Konfigurationsdateien: Bekannt ist package.json bei Node.js-Projekten. Weil Kommentare fehlen, greifen manche Werkzeuge auf Varianten wie JSONC zurück oder man nutzt gleich YAML (Vergleich: JSON vs. YAML).
  • Datenspeicherung und Export: Dokumentendatenbanken, Logs und Exportdateien nutzen JSON. Dateien haben üblicherweise die Endung .json. Wie du solche Dateien unter Windows, auf dem Mac oder im Browser öffnest, zeigt der Ratgeber JSON-Datei öffnen und lesen.

Brauchst du dieselben Daten als YAML, wandelt der JSON-zu-YAML-Konverter sie direkt im Browser um.

JSON ist kein JavaScript-Objekt

JSON stammt aus der JavaScript-Schreibweise, ist aber ein reines Datenformat: Es ist Text. Ein JavaScript-Objektliteral ist dagegen Code und viel freier:

// JavaScript-Objektliteral: gültig in JS, aber kein JSON
const nutzer = {
  name: 'Ada',            // Schlüssel ohne Anführungszeichen, einfache Quotes
  alter: undefined,       // undefined
  gruss() { return 'Hi' }, // Funktion
  // Kommentare erlaubt
  rollen: ['admin',],     // Komma am Ende erlaubt
};

Zwischen beiden vermitteln zwei eingebaute Funktionen:

const text = JSON.stringify({ name: "Ada", alter: undefined, aktiv: true });
// '{"name":"Ada","aktiv":true}'  – undefined wird weggelassen

const objekt = JSON.parse('{"name":"Ada","aktiv":true}');
// { name: 'Ada', aktiv: true }

JSON.stringify() erzeugt aus einem Objekt gültiges JSON oder bricht mit einem Fehler ab, etwa bei zirkulären Verweisen oder BigInt-Werten. JSON.parse() liest nur Text, der den strengen Regeln entspricht, und wirft sonst einen Fehler. Deshalb solltest du JSON nie von Hand per Textverkettung bauen.

Kurz gesagt

  • JSON ist ein textbasiertes, sprachunabhängiges Datenformat, festgelegt in ECMA-404 und RFC 8259.
  • Es kennt sechs Werttypen: Objekt, Array, String, Zahl, true/false und null.
  • Strenge Regeln: doppelte Anführungszeichen, kein Komma am Ende, keine Kommentare, kein NaN, Infinity oder undefined.
  • Der MIME-Type ist application/json, typische Einsatzorte sind APIs und Konfigurationsdateien wie package.json.
  • Ein JavaScript-Objektliteral ist nicht automatisch JSON. Erzeuge JSON mit JSON.stringify().

Weiterlesen: JSON-Fehler finden und beheben, JSON vs. YAML, Was ist YAML?, Ist es sicher, JSON online zu formatieren? und der JSON-Formatierer.