← Alle Artikel

Nachgestelltes Komma in JSON: Warum { "a": 1, } einen Fehler wirft

Ein einzelnes verirrtes Komma nach dem letzten Element in einem JSON-Objekt oder -Array verursacht einen SyntaxError. Lerne, warum JSON nachgestellte Kommas verbietet, woher sie kommen und wie du sie entfernst.

Du schreibst, was wie absolut vernünftiges JSON aussieht —— jeder Key in Anführungszeichen, jeder Wert gültig —— und JSON.parse() wirft trotzdem einen SyntaxError. Der Schuldige ist fast immer ein Trailing Comma: dieses eine zusätzliche ,, das nach dem letzten Element eines Objekts oder Arrays sitzt. Hier ist, warum JSON es verbietet, woher es sich einschleicht und wie du es loswirst.

Was ist ein Trailing Comma?

Ein Trailing Comma (auch „dangling comma" oder „final comma" genannt) ist ein Komma, das nach dem letzten Element einer Liste erscheint —— ohne irgendetwas davor schließender Klammer.

// Trailing Comma in einem Objekt
{
  "name": "Ada",
  "score": 98,   // ← dieses Komma hat kein nächstes Element
}

// Trailing Comma in einem Array
[1, 2, 3,]
//       ^ gleiches Problem

Beide obigen Beispiele werfen einen SyntaxError, wenn sie an JSON.parse() übergeben werden.

Warum verbietet JSON Trailing Commas?

Die JSON-Grammatik (in RFC 8259 definiert) spezifiziert, dass ein Komma ein Trenner zwischen Elementen ist —— es muss immer auf beiden Seiten einen Wert haben. Die formale Regel für ein JSON-Objekt sieht so aus:

object = "{" [ member *( "," member ) ] "}"
member = string ":" value

Auf ein Komma muss ein weiteres member folgen. Wenn nach dem Komma nichts steht, ist die Grammatik ungültig. Das war eine bewusste Designentscheidung: JSON priorisiert Einfachheit und eindeutiges Parsen gegenüber Entwicklerkomfort.

JavaScript ist einen anderen Weg gegangen. ES5 (2009) machte Trailing Commas in Array-Literalen explizit legal, und ES2017 erweiterte das auf Funktionsparameter. Trailing Commas in JS sind jetzt gängiger Stil —— viele Linter erzwingen sie sogar, weil sie sauberere git-diffs erzeugen, wenn du ein neues Item zu einer Liste hinzufügst.

Die Lücke zwischen dem, was JavaScript erlaubt, und dem, was JSON erlaubt, ist die Wurzel fast jedes Trailing-Comma-Fehlers, den du je sehen wirst.

Woher Trailing Commas kommen

Hand-editierte Config-Dateien

Config-Dateien wie tsconfig.json, package.json oder App-Settings werden von Menschen editiert. Nach dem Hinzufügen oder Entfernen eines Eintrags ist es leicht, ein verirrtes Komma zurückzulassen. Viele Editoren (VS Code, WebStorm) akzeptieren stillschweigend JSONC (JSON-with-Comments), das Trailing Commas erlaubt, also sieht die Datei im Editor gut aus, bricht aber zur Laufzeit.

// Du hast "debug": true gelöscht, aber das Komma vergessen
{
  "compilerOptions": {
    "strict": true,
    "target": "ES2020",   // ← jetzt trailing
  }
}

JavaScript → JSON Serialisierung

Entwickler bauen manchmal einen JSON-String manuell, indem sie JavaScript-Werte per String-Interpolation einsetzen oder Array.join(',') nutzen. Wenn die Logik nach jedem Item unbedingt ein Komma hinzufügt, bekommt das letzte Item ein Trailing Comma.

// ❌ naive manuelle Serialisierung
const parts = items.map(item => `"${item.name}": ${item.value}`);
const json = '{' + parts.join(',') + ',}'; // zusätzliches Komma vor }

// ✅ nutze JSON.stringify —— erzeugt immer gültiges JSON
const json = JSON.stringify(Object.fromEntries(items.map(i => [i.name, i.value])));

LLM- und KI-Output

Sprachmodelle, die gebeten werden, „JSON auszugeben", produzieren häufig Trailing Commas. Das Modell hat während des Trainings enorme Mengen JavaScript-Code gesehen, in denen Trailing Commas legal sind, also repliziert es das Muster. Validiere oder repariere KI-generiertes JSON immer, bevor du es parst.

Copy-Paste aus JavaScript-Quellen

Ein Objektliteral aus einer .js- oder .ts-Datei zu kopieren und in einen JSON-Kontext einzufügen ist einer der häufigsten Wege, wie Trailing Commas erscheinen. Der Quellcode war gültiges JavaScript; das Ziel akzeptiert nur JSON.

Wie man das Trailing Comma findet

Die Fehlermeldung zeigt dich meistens nah ans Problem, aber nicht immer genau auf das Komma —— der Parser bemerkt erst, dass etwas falsch ist, wenn er auf das unerwartete } oder ] trifft:

SyntaxError: Expected double-quoted property name in JSON at position 58
// oder
SyntaxError: Unexpected token '}', ..."score": 98,}" is not valid JSON

Arbeite von der gemeldeten Position rückwärts. Das Trailing Comma ist das Zeichen unmittelbar vor der schließenden Klammer, die den Fehler ausgelöst hat.

Für große JSON-Dateien hilft eine Regex-Suche:

// Trailing Commas in Objekten/Arrays finden
,\s*[}\]]

Wie du es behebst

Option 1 —— Manuell löschen

Finde das letzte Item im betreffenden Objekt oder Array und entferne das Komma danach. Für kleine Dateien ist das der schnellste Ansatz.

Option 2 —— Regex-Ersetzung (Vorsicht)

const fixed = raw.replace(/,\s*([}\]])/g, '$1');
JSON.parse(fixed);

Das funktioniert im üblichen Fall, ist aber fragil: es kann Strings korrumpieren, die ,} oder ,] als Literalzeichen enthalten. Nutze es nur, wenn du weißt, dass der Input solche Strings nicht enthält.

Option 3 —— Einen richtigen Repair-Parser nutzen

Ein Repair-Parser versteht die vollständige JSON-Grammatik und entfernt Trailing Commas nur an den strukturellen Stellen, wo sie ungültig sind, ohne Stringinhalte anzufassen. Das ist der sicherste Ansatz für Produktionscode oder nicht vertrauenswürdiges Input.

Option 4 —— Für Config-Dateien zu JSONC wechseln

Wenn die Trailing Commas in einer Config-Datei sind, die du kontrollierst, erwäge den Wechsel zu einem Parser, der JSONC (JSON mit Kommentaren) unterstützt. TypeScripts tsconfig.json nutzt bereits JSONC. Für Node.js-Config-Dateien parsen Libraries wie @humanwhocodes/momoa oder json5 eine JSON-Obermenge, die Trailing Commas und Kommentare erlaubt.

Wann Trailing Commas tatsächlich erlaubt sind: JSONC und JSON5

Zwei JSON-nahe Formate erlauben absichtlich Trailing Commas (und einige weitere Lockerungen) und sollten erkannt werden:

  • JSONC (JSON mit Kommentaren) —— genutzt von tsconfig.json, VS Codes settings.json und vielen anderen Entwickler-Configs. JSONC erlaubt // / /* */ Kommentare und Trailing Commas. Die Datei heißt weiterhin .json, aber das Standard-JSON.parse() lehnt sie ab —— VS Code und Tooling liefern JSONC-bewusste Parser mit.
  • JSON5 —— eine vollere Obermenge: Kommentare, Trailing Commas, Keys ohne Anführungszeichen, einfache Anführungszeichen, mehrzeilige Strings, Hex-Zahlen. Opt-in mit dem npm-Paket json5 oder pyjson5 in Python. Nutze es dort, wo Menschen Daten von Hand editieren und du den Parser kontrollierst; sende es nicht über eine API an Clients, die striktes JSON erwarten.

Faustregel: halte Trailing Commas fern von allem, was einen strikten JSON-Parser kreuzt (API-Antworten, Request-Bodies, von beliebigen Libraries konsumierte Dateien), und nutze sie nur in JSONC/JSON5, wo der Consumer es weiß.

Trailing Commas verhindern

  • Bau JSON-Strings nie manuell. Nutze JSON.stringify() —— erzeugt immer spec-konforme Ausgabe.
  • Füge eine Linter-Regel hinzu. ESLints jsonc/no-trailing-commas-Regel fängt Trailing Commas in .json-Dateien beim Speichern.
  • Validiere KI-Output. Lass immer JSON.parse() (oder einen Repair-Parser) auf alles laufen, was ein Sprachmodell generiert, bevor du es nutzt.
  • Nutze Prettier. Prettier formatiert JSON-Dateien neu und entfernt Trailing Commas beim Speichern automatisch.

Häufig gestellte Fragen

Erlaubt JSON Trailing Commas?

Nein. Die JSON-Grammatik in RFC 8259 definiert ein Komma strikt als Trenner zwischen zwei Werten, also ist ein Komma, dem vor dem schließenden } oder ] nichts folgt, ungültig. Jeder Standard-Parser —— JSON.parse(), Pythons json-Modul, Gos encoding/json —— lehnt es ab.

Wie entferne ich ein Trailing Comma aus JSON?

Für eine Datei das Komma nach dem letzten Item manuell löschen. Für wiederholte oder programmatische Fixes JSON.stringify() zum Regenerieren des JSON, einen Repair-Parser oder ein Tool wie JSON Fix nutzen, das strukturelle Trailing Commas entfernt, ohne Stringinhalte anzufassen.

Warum erlaubt JavaScript Trailing Commas, aber JSON nicht?

JavaScript fügte Trailing Commas in ES5 (Arrays) und ES2017 (Funktionsparameter) als Entwickler-Komfort-Feature hinzu, das sauberere git-diffs erzeugt. JSON ist ein bewusst minimales Austauschformat, das eindeutiges Parsen über Komfort stellt, also hat es sie nie übernommen. Siehe JSON vs. JavaScript-Objekte für die vollständige Liste der Unterschiede.

Welchen Fehler verursacht ein Trailing Comma?

Meistens SyntaxError: Unexpected token '}' oder Expected double-quoted property name in JSON, weil der Parser nach dem Komma einen weiteren Wert erwartet und stattdessen die schließende Klammer findet. Das ist eine Variante der breiteren JSON.parse-„Unexpected token"-Fehler.

Jetzt beheben —— ohne Setup

Wenn du einen JSON-String mit Trailing Commas hast, den du sofort behoben brauchst, entfernt JSON Fix sie automatisch zusammen mit anderen üblichen Problemen —— einfachen Anführungszeichen, Keys ohne Anführungszeichen, Python-Literalen, JavaScript-Kommentaren. Füge dein JSON ein, klicke Repair & Format und kopiere sauberes JSON zurück. Kein Account, kein Upload, keine Daten verlassen deinen Browser.