Komma am Ende (Trailing Comma) in JSON: warum es nicht erlaubt ist
Ein Komma nach dem letzten Eintrag eines Objekts oder einer Liste heißt auf Englisch „trailing comma“. In JavaScript, Python und vielen anderen Sprachen ist es erlaubt, in JSON nicht:
{
"name": "Ada",
"sprachen": ["de", "en",],
}
Dieses JSON enthält gleich zwei solche Kommas: nach "en" und nach ]. Korrekt ist:
{
"name": "Ada",
"sprachen": ["de", "en"]
}
Warum JSON das nicht erlaubt
JSON ist bewusst minimal gehalten. Der Standard (RFC 8259) definiert ein Objekt als Einträge, die durch Kommas getrennt werden. Ein Komma steht also immer zwischen zwei Einträgen, nie danach. Diese strenge Regel macht JSON-Parser einfach und sorgt dafür, dass jedes Programm denselben Text gleich versteht.
JavaScript erlaubt das Komma am Ende dagegen in Objekt- und Array-Literalen. Weil JSON wie JavaScript aussieht, schleicht sich der Fehler leicht ein – besonders beim Kopieren aus JavaScript-Code.
So lauten die Fehlermeldungen
Die Meldung hängt davon ab, ob das Komma in einem Objekt oder in einer Liste steht:
| Umgebung | {"a": 1,} |
[1, 2,] |
|---|---|---|
| Chrome, Edge, Node.js | Expected double-quoted property name in JSON at position 8 |
Unexpected token ']', "[1, 2,]" is not valid JSON |
| Firefox | JSON.parse: expected double-quoted property name |
JSON.parse: unexpected character |
| Safari | JSON Parse error: Property name must be a string literal |
JSON Parse error: Unexpected comma at the end of array expression |
Python (json.loads) |
Expecting property name enclosed in double quotes |
Expecting value |
| jq | Expected another key-value pair |
Expected another array element |
Keine dieser Meldungen sagt „Komma“. Der Parser hat nach dem Komma einen weiteren Eintrag erwartet und stattdessen } oder ] gefunden. Die gemeldete Position ist deshalb die der schließenden Klammer, das überflüssige Komma steht direkt davor (eventuell durch Leerzeichen oder einen Zeilenumbruch getrennt).
Der JSON-Formatierer erkennt den Fall ausdrücklich und markiert das Komma selbst, nicht die Klammer.
Wie das Komma hineinkommt
- Letzten Eintrag gelöscht: Aus
"a": 1, "b": 2wird durch Löschen von"b": 2schnell"a": 1,. - Aus Code kopiert: In JavaScript, TypeScript und Python ist das Komma am Ende üblich, viele Code-Formatierer setzen es sogar automatisch.
- Selbst zusammengesetzt: Wer JSON in einer Schleife per String-Verkettung baut, hängt leicht nach jedem Eintrag ein Komma an – auch nach dem letzten.
- Konfigurationsdateien: Manche Programme lesen ihre Konfiguration als JSONC oder JSON5, die mehr erlauben (siehe unten). Kopierst du daraus in eine echte JSON-Datei, passt die Syntax nicht mehr.
So behebst du es
Bei einzelnen Dateien: das Komma vor } bzw. ] löschen. Bei großen Dateien hilft der Formatierer, die Stellen der Reihe nach zu finden: Er zeigt immer den ersten Fehler; nach dem Korrigieren springt die Meldung zum nächsten.
Vorsicht mit Suchen-und-Ersetzen per regulärem Ausdruck, etwa ,\s*} durch } ersetzen: Das ändert auch Texte, in denen diese Zeichenfolge zufällig vorkommt, zum Beispiel "Hinweis": "a, }". Sicherer ist ein Parser, der das Komma am Ende versteht – etwa eine JSON5-Bibliothek –, und danach das Ergebnis wieder als echtes JSON zu speichern.
So vermeidest du es dauerhaft
Erzeuge JSON mit einer Bibliothek, nie per Hand. Jede Sprache bringt das mit:
// JavaScript
const json = JSON.stringify({ name: 'Ada', sprachen: ['de', 'en'] }, null, 2);
# Python
import json
text = json.dumps({"name": "Ada", "sprachen": ["de", "en"]}, indent=2, ensure_ascii=False)
Diese Funktionen setzen Kommas, Anführungszeichen und Escape-Sequenzen immer richtig. ensure_ascii=False sorgt in Python dafür, dass Umlaute als Umlaute erscheinen statt als \u00fc.
Lass deinen Editor prüfen. Editoren wie VS Code markieren das Komma am Ende in .json-Dateien als Fehler, bevor du speicherst.
Prüfe JSON in der CI. Ein Schritt wie jq empty datei.json bricht mit einer Fehlermeldung ab, wenn eine Datei ungültig ist.
Wo das Komma am Ende erlaubt ist
Wenn du die Datei selbst einliest und Kommas am Ende (und Kommentare) möchtest, gibt es Formate, die das ausdrücklich erlauben:
- JSON5 erlaubt Kommas am Ende, Kommentare, einfache Anführungszeichen und Schlüssel ohne Anführungszeichen. Es braucht aber einen eigenen Parser.
- JSONC („JSON with Comments“) nutzt zum Beispiel VS Code für seine Einstellungsdateien. Ob dort ein Komma am Ende akzeptiert wird, hängt vom Programm ab.
- YAML braucht gar keine Kommas zwischen Einträgen in Blockschreibweise. Mit dem Tool JSON in YAML umwandeln kannst du vorhandenes JSON übertragen.
Für Daten, die zwischen Programmen ausgetauscht werden, bleibt Standard-JSON ohne Komma am Ende die sichere Wahl: Jedes Programm kann es lesen. Mehr über die Unterschiede steht im Ratgeber Kommentare in JSON.