Ratgeber · JSON 2026
JSONC und JSON5: wann Kommentare im JSON erlaubt sind
tsconfig.json und settings.json sind kein striktes JSON - sie sind JSONC. Warum das wichtig ist, wenn ein Build-Tool die Datei einlesen muss.
Von Mateusz Viola
Betreiber & redaktionelle Verantwortung json-formatieren.de
Veröffentlicht
Aktualisiert:
Warum es überhaupt Erweiterungen gibt
Striktes JSON ist toll für maschinen-generierte APIs, aber unpraktisch für hand-gepflegte Konfigurationsdateien. Wer in einer 200-Zeilen-tsconfig.json den Sinn einer obscuren Compiler-Option dokumentieren will, vermisst Kommentare. Daraus sind zwei populäre Erweiterungen entstanden: JSONC und JSON5.
JSONC: JSON mit Comments
Microsoft hat JSONC (JSON with Comments) für VS Code eingeführt. Es erlaubt zwei Comment-Stile:
{
// Einzeiliger Kommentar
"name": "Mateusz",
/* Mehrzeiliger
Kommentar */
"age": 30
}
Sonst ist die Syntax identisch zu JSON: Double-Quotes, keine trailing Commas, keine unzitierten Keys. Wird genutzt in: tsconfig.json, .vscode/settings.json, .vscode/tasks.json, .vscode/launch.json.
JSON5: noch mehr Lockerheit
JSON5 (spezifiziert auf json5.org) erlaubt zusätzlich:
- Einzeilige und mehrzeilige Kommentare (wie JSONC)
- Trailing-Commas in Objects und Arrays
- Single-Quotes für Strings
- Unzitierte Keys (wenn sie valide JS-Identifier sind)
- Hex-Zahlen:
0xFF NaN,Infinity,-Infinity- Mehrzeilige Strings mit Backslash-Continuation
Wer parst was?
| Datei | Format | Parser |
|---|---|---|
| package.json | striktes JSON | JSON.parse |
| tsconfig.json | JSONC | jsonc-parser (TypeScript) |
| .eslintrc.json | JSONC | cjson (ESLint) |
| .vscode/settings.json | JSONC | jsonc-parser |
| babel.config.json | striktes JSON | JSON.parse |
| .prettierrc.json | JSON | JSON.parse |
Fallstrick: JSON.parse auf JSONC
Wenn ein Tool tsconfig.json mit naivem JSON.parse einliest, scheitert es bei jedem Kommentar. Bekannte Beispiele:
- ts-node nutzt einen JSONC-Reader korrekt
- Eigene Build-Skripte, die
require('./tsconfig.json')machen, crashen bei Kommentaren - Lösung:
npm install jsonc-parserundparse(content)statt JSON.parse
Convert JSONC zu JSON
Wenn man JSONC strippen muss bevor strikt geparst wird:
// Naive Variante - funktioniert für 99 % der Fälle
const stripped = content
.replace(/\/\*[\s\S]*?\*\//g, '') // Block-Kommentare
.replace(/\/\/.*$/gm, ''); // Zeilen-Kommentare
JSON.parse(stripped);
Edge-Case: Comment-Pattern in String-Literalen wird fälschlich entfernt. Für robuste Lösung: jsonc-parser verwenden.
Mein Default
APIs und maschinen-generierte Files: striktes JSON, kein Spielraum. Editor- und Tool-Configs: JSONC ist ok, weil die Tools dafür ausgelegt sind. JSON5: nur intern, nie als API-Ausgabe - die meisten Parser kennen es nicht.