json-formatieren.de

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.

Foto von Mateusz Viola

Von Mateusz Viola

Betreiber & redaktionelle Verantwortung json-formatieren.de

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?

DateiFormatParser
package.jsonstriktes JSONJSON.parse
tsconfig.jsonJSONCjsonc-parser (TypeScript)
.eslintrc.jsonJSONCcjson (ESLint)
.vscode/settings.jsonJSONCjsonc-parser
babel.config.jsonstriktes JSONJSON.parse
.prettierrc.jsonJSONJSON.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-parser und parse(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.

Mehr zum Thema