Kommentare in JSON: Geht das? JSONC und JSON5 erklärt

Kurze Antwort: Nein. Standard-JSON kennt keine Kommentare, weder // … noch /* … */ noch # …. Ein Kommentar macht das JSON ungültig:

{
  // Port des Servers
  "port": 8080
}

Trotzdem siehst du Kommentare in Dateien wie tsconfig.json oder den Einstellungen von VS Code. Diese Dateien sind streng genommen kein JSON, sondern eine Variante davon. Dieser Ratgeber erklärt die Unterschiede und welche Lösung wann passt.

So lauten die Fehlermeldungen

Umgebung Meldung
Chrome, Edge, Node.js Expected property name or '}' in JSON at position 4 (wie im Beispiel oben) oder Unexpected token '/', "// …" is not valid JSON (Kommentar ganz am Anfang)
Firefox JSON.parse: expected property name or '}' oder JSON.parse: unexpected character
Safari JSON Parse error: Unrecognized token '/'
Python (json.loads) Expecting property name enclosed in double quotes oder Expecting value

Die Meldungen nennen das Wort „Kommentar“ nicht. Zeigt die gemeldete Position auf ein /, ist aber fast immer ein Kommentar die Ursache. Der JSON-Formatierer sagt es direkt: „Kommentare sind in JSON nicht erlaubt“.

Warum JSON keine Kommentare hat

JSON wurde als einfaches Austauschformat zwischen Programmen entworfen, nicht als Konfigurationssprache. Douglas Crockford, der JSON bekannt gemacht hat, hat nach eigener Aussage Kommentare bewusst herausgenommen: Er hatte gesehen, dass manche sie für Anweisungen an den Parser nutzten. Das hätte die Austauschbarkeit zerstört – ein Programm hätte dieselbe Datei anders verstanden als ein anderes.

Die Folge: Jeder JSON-Parser auf der Welt liest dieselben Daten gleich. Der Preis: Für Dateien, die Menschen schreiben und lesen, fehlt etwas.

Möglichkeit 1: ein Kommentarfeld

Die einfachste Lösung, die mit jedem Parser funktioniert, ist ein normales Feld:

{
  "_kommentar": "Port des Servers; 8080 nur für die Entwicklung",
  "port": 8080
}

Das bleibt gültiges JSON. Der Nachteil: Der „Kommentar“ ist ein Datenfeld. Das Programm liest ihn mit ein, und ein Schema, das unbekannte Felder verbietet, lehnt ihn ab. Für Konfigurationen, die du selbst einliest, ist das oft trotzdem die pragmatischste Lösung.

Möglichkeit 2: JSONC

JSONC steht für „JSON with Comments“: JSON, das zusätzlich //- und /* */-Kommentare erlaubt. VS Code verwendet es für settings.json und andere Einstellungsdateien, und auch TypeScript liest tsconfig.json mit Kommentaren.

Wichtig: JSONC ist kein offizieller Standard, sondern eine Konvention. Ob Kommas am Ende zusätzlich erlaubt sind, hängt vom jeweiligen Programm ab. Und: Ein normaler JSON-Parser wie JSON.parse() liest JSONC nicht. Wer solche Dateien selbst einlesen will, braucht einen passenden Parser oder muss die Kommentare vorher entfernen.

Möglichkeit 3: JSON5

JSON5 geht weiter und erlaubt vieles, was aus JavaScript bekannt ist:

// JSON5
{
  // Kommentare
  name: 'Ada',            // Schlüssel ohne Anführungszeichen, einfache Anführungszeichen
  sprachen: ['de', 'en',], // Komma am Ende
  maske: 0xFF,            // Hexadezimalzahlen
}

JSON5 hat eine eigene Spezifikation und Parser für viele Sprachen. Es eignet sich gut für Dateien, die Menschen schreiben. Für den Austausch zwischen Programmen ist es weniger geeignet, weil nicht jedes Programm JSON5 liest.

Möglichkeit 4: YAML

Wenn du eine Konfigurationsdatei neu anlegst und Kommentare brauchst, ist YAML oft die bessere Wahl. YAML erlaubt Kommentare mit # und braucht weder Klammern noch Kommas:

# Port des Servers
port: 8080
sprachen:
  - de
  - en

Jedes gültige JSON lässt sich in YAML umwandeln, zum Beispiel mit dem Tool JSON in YAML umwandeln. Enthält dein JSON schon Kommentare, entferne sie vorher, denn der Konverter erwartet gültiges JSON – und schreibe sie danach als #-Kommentare ins YAML.

Was passt wann?

JSON JSONC JSON5 YAML
Kommentare nein ja ja ja (#)
Komma am Ende nein je nach Programm ja nicht nötig
Einfache Anführungszeichen nein nein ja ja
Schlüssel ohne Anführungszeichen nein nein ja ja
Liest JSON.parse() ja nein nein nein

Die Faustregel:

  • Daten zwischen Programmen (APIs, Exporte, Nachrichten): Standard-JSON, ohne Kommentare.
  • Konfiguration für ein Werkzeug, das JSONC oder JSON5 erwartet: Halte dich an das, was das Werkzeug dokumentiert.
  • Eigene, neue Konfigurationsdateien mit Erklärungen: YAML oder JSON5.

Kommentare aus einer Datei entfernen

Musst du eine Datei mit Kommentaren an ein Programm geben, das nur JSON liest, entferne die Kommentare vorher. Für einzelne Dateien geht das von Hand. Automatisch geht es am sichersten mit einem Parser, der das Format versteht – etwa einer JSON5-Bibliothek –, der die Daten einliest und als Standard-JSON wieder ausgibt.

Von einem einfachen Suchen-und-Ersetzen nach // ist abzuraten: In Texten wie "url": "https://example.com" steht // auch ohne Kommentar.