JSON-Guide: Syntax, Validierung und häufige Fehler

9 min12. Mai 2026

Was ist JSON wirklich?

JSON (JavaScript Object Notation) ist ein textbasiertes Datenformat, definiert in RFC 8259. Trotz des Namens hat es nichts mit dem Ausführen von JavaScript zu tun — es ist nur eine Art, strukturierte Daten als Klartext darzustellen. Jede wichtige Programmiersprache kann es lesen und schreiben.

Das Format wurde um 2001 von Douglas Crockford formalisiert, setzte sich aber durch, weil es einfacher als XML ist und gleichzeitig menschenlesbar genug zum Debuggen auf einen Blick. Heute ist es das Standard-Wire-Format für REST-APIs, Konfigurationsdateien (package.json, tsconfig.json) und Dokumentdatenbanken wie MongoDB.

Etwas, das Leute überrascht: JSON ist eine strikte Teilmenge von YAML 1.2. Jede gültige JSON-Datei ist auch gültiges YAML. Umgekehrt gilt das nicht — YAML erlaubt Kommentare, mehrzeilige Strings und Anchors, die JSON nicht unterstützt.

JSON-Syntaxregeln (die, die wirklich zählen)

JSON hat genau 6 Datentypen: String, Number, Boolean (true/false), null, Object (Schlüssel-Wert-Paare) und Array (geordnete Liste). Das ist alles. Keine Dates, kein undefined, keine Funktionen.

Strings müssen doppelte Anführungszeichen verwenden. Einfache Anführungszeichen sind ungültig. Das ist der #1 Grund, warum Leute "unexpected token"-Fehler bekommen, wenn sie JavaScript-Objekte in eine JSON-Datei einfügen.

Zahlen dürfen keine führenden Nullen haben (01 ist ungültig), keine Hex-Notation verwenden (0xFF ist ungültig) und nicht NaN oder Infinity sein. Wenn du diese Werte brauchst, kodiere sie als Strings.

Objekte verwenden geschweifte Klammern {} mit Schlüssel-Wert-Paaren, getrennt durch Doppelpunkte. Schlüssel müssen Strings in doppelten Anführungszeichen sein. Trailing Commas nach dem letzten Element sind illegal — das ist der häufigste Syntaxfehler in handbearbeitetem JSON.

// ❌ INVALID — these mistakes are everywhere
{
  name: "Alice",        // keys must be quoted
  'age': 30,           // single quotes not allowed
  "scores": [1, 2, 3,], // trailing comma
  "id": 0x1F,          // hex numbers not allowed
}

// ✅ VALID JSON
{
  "name": "Alice",
  "age": 30,
  "scores": [1, 2, 3],
  "id": 31
}

Die 5 häufigsten JSON-Fehler (und wie man sie behebt)

1. Trailing Comma: Entferne das Komma nach dem letzten Element in einem Objekt oder Array. Die meisten Formatter heben das sofort hervor. Wenn du Trailing Commas willst, verwende JSONC (JSON with Comments) in VS-Code-Einstellungen.

2. Unexpected token at position 0: Bedeutet normalerweise, dass die Antwort gar kein JSON ist — es könnte eine HTML-Fehlerseite sein (beginnt mit <) oder ein leerer String. Prüfe deinen API-Endpoint und den Content-Type-Header.

3. Schlüssel ohne Anführungszeichen: Kopieren aus der JavaScript-Konsole gibt dir {name: "value"} statt {"name": "value"}. Lass es durch einen Formatter laufen, um automatisch Anführungszeichen hinzuzufügen.

4. Strings mit einfachen Anführungszeichen: Pythons json.dumps() produziert immer doppelte Anführungszeichen, aber wenn du JSON von Hand schreibst oder aus einem Python-repr() kopierst, könntest du einfache Anführungszeichen haben. Suchen-und-Ersetzen funktioniert nicht, wenn Strings Apostrophe enthalten — verwende einen richtigen Formatter.

5. BOM (Byte Order Mark): Manche Windows-Editoren stellen ein unsichtbares \uFEFF-Zeichen voran. JSON-Parser verschlucken sich daran. Öffne die Datei in einem Hex-Editor — wenn sie mit EF BB BF beginnt, ist das dein BOM. Speichere als UTF-8 ohne BOM.

JSON vs JSONC vs JSON5 vs YAML: Wann was verwenden

Standard-JSON (RFC 8259): Verwende für API-Payloads, Datenaustausch und alles, was maximale Kompatibilität braucht. Jeder Parser in jeder Sprache unterstützt es.

JSONC (JSON with Comments): Verwende für Konfigurationsdateien, die du von Hand bearbeitest — VS-Code-Einstellungen, tsconfig.json usw. Erlaubt // und /* */-Kommentare plus Trailing Commas. Wird von Standard-JSON.parse() nicht unterstützt.

JSON5: Erweitert JSON um Schlüssel ohne Anführungszeichen, Strings mit einfachen Anführungszeichen, Hex-Zahlen, Trailing Commas und Kommentare. Gut für von Menschen bearbeitete Config-Dateien. Erfordert das json5-npm-Paket zum Parsen.

YAML: Verwende wenn du Kommentare, mehrzeilige Strings oder Anchors/Aliases für DRY-Config brauchst. Verbreitet in DevOps (Docker Compose, Kubernetes, GitHub Actions). Vorsicht: Einrückungsfehler sind still und tödlich. Das "Norwegen-Problem" (NO wird als false geparst) hat viele Teams getroffen.

Unsere Empfehlung: Verwende Standard-JSON für alles, was Maschinen lesen. Verwende JSONC oder YAML für alles, was Menschen regelmäßig bearbeiten. Verwende JSON5 nicht, es sei denn dein Team hängt bereits davon ab.

Mit großen JSON-Dateien arbeiten

Browserbasierte Tools (einschließlich unseres) können Dateien bis etwa 50 MB verarbeiten, bevor der Tab anfängt zu laggen. Für größere Dateien verwende Kommandozeilen-Tools: jq für Abfragen, python -m json.tool zum Formatieren oder fx für interaktive Exploration.

Wenn du regelmäßig mit JSON-Dateien über 100 MB arbeitest, überlege ob JSON das richtige Format ist. NDJSON (Newline-Delimited JSON, ein Objekt pro Zeile) ist streambar und erfordert nicht, die gesamte Datei in den Speicher zu laden. Tools wie jq können NDJSON Zeile für Zeile verarbeiten.

Für API-Antworten ist Paginierung dein Freund. Wenn ein Endpoint 10.000 Objekte in einer Antwort zurückgibt, ist das ein API-Design-Problem, kein JSON-Problem. Fordere kleinere Seiten an und verarbeite sie inkrementell.

Performance-Tipp: JSON.parse() in V8 ist tatsächlich schneller als ein JavaScript-Objekt-Literal für große Objekte (kontraintuitiv aber wahr seit 2019). Wenn du einen großen statischen Datensatz in deinem Frontend-Code hast, kann das Einwickeln in JSON.parse('...') die Startzeit verbessern.

JSON-Sicherheitsüberlegungen

Verwende nie eval() zum Parsen von JSON. Das war Anfang der 2000er üblich, bevor JSON.parse() existierte, aber es führt beliebigen Code aus. Verwende immer JSON.parse() oder das Äquivalent deiner Sprache.

Achte auf Prototype Pollution in JavaScript. Wenn du {"__proto__": {"isAdmin": true}} parst und in ein Objekt mergst, könntest du versehentlich Object.prototype modifizieren. Bibliotheken wie lodash.merge hatten diese Schwachstelle. Verwende Object.create(null) für geparste Daten, die du nicht kontrollierst.

JSON unterstützt keine zirkulären Referenzen. Wenn du versuchst, ein Objekt zu JSON.stringify(), das sich selbst referenziert, bekommst du einen TypeError. Verwende eine Replacer-Funktion oder eine Bibliothek wie flatted, um zirkuläre Strukturen zu handhaben.

Größenlimits sind wichtig für APIs. Ein 10-MB-JSON-Payload kann ein Denial-of-Service-Vektor sein. Setze Content-Length-Limits auf deinem Server (Express: express.json({limit: "1mb"}), nginx: client_max_body_size). Das BSI empfiehlt, Eingabegrößen grundsätzlich zu begrenzen.

JSON in verschiedenen Kontexten validieren

Für schnelle Validierung: Füge es in unser JSON-Formatter-Tool ein. Es zeigt die exakte Zeile und Zeichenposition von Syntaxfehlern, verarbeitet Dateien bis 50 MB und funktioniert offline.

Für Schema-Validierung: Verwende JSON Schema (Draft 2020-12), um die Struktur zu definieren, der dein JSON folgen soll. Tools wie ajv (JavaScript) oder jsonschema (Python) validieren Daten gegen ein Schema zur Laufzeit. Das fängt "gültiges JSON aber falsche Struktur"-Fehler ab, die Syntaxprüfung nicht erkennt.

Für CI/CD-Pipelines: Füge einen JSON-Lint-Schritt hinzu. Der einfachste Ansatz: python -m json.tool < file.json > /dev/null. Für strengere Prüfung mit Schema-Validierung verwende ajv-cli oder check-jsonc-syntax.

Für Config-Dateien: Die meisten Frameworks validieren ihr eigenes Config-Format. next build fängt next.config.js-Probleme ab, tsc --noEmit fängt tsconfig.json-Probleme ab. Erfinde keine Validierung neu, die deine Toolchain bereits bietet.