JSONC ist eine erweiterte Version des traditionellen JSON-Formats, die das Hinzufügen von Kommentaren in Konfigurationsdateien ermöglicht, ohne das Datenformat zu verändern. Während JSON für seine Einfachheit und Lesbarkeit bekannt ist, bietet JSONC Entwicklern, die Konfigurationsdetails direkt in der Datei dokumentieren müssen, einen zusätzlichen Vorteil. Dieses Format ist besonders nützlich in großen Projekten oder Teams, die auf den Austausch von Dateien mit Annotationen angewiesen sind, und es vereinfacht die Datenverwaltung erheblich. In diesem Artikel gehen wir auf die wichtigsten Unterschiede zwischen JSON und JSONC ein und erklären, wann welches Format für Ihr Projekt am besten geeignet ist.

JSON hat sich zu einem weit verbreiteten Datenformat entwickelt, das in API-Antworten, Spielständen und Konfigurationsprozessen zum Einsatz kommt. Viele sind jedoch der Ansicht, dass es verbessert werden kann, und es wurden bereits zahlreiche Versuche unternommen, es zu erweitern oder zu verbessern. JSONC ist einer dieser Versuche.
Was ist JSONC und warum wurde es entwickelt?
JavaScript Object Notation (JSON) ist ein lesbares Textformat zur Speicherung strukturierter Daten mithilfe von Name-Wert-Paaren, Arrays und Standardwerten. Es wurde stark von der Struktur von JavaScript beeinflusst – daher der Name –, wird aber heute in nahezu allen Programmiersprachen und unterschiedlichsten Umgebungen als neutrales Format für den Datenaustausch verwendet.
Trotz seiner Popularität hat JSON auch Kritiker. Die häufigsten Einwände beziehen sich auf seine Struktur und lauten in der Regel wie folgt:
Kommentare sind nicht erlaubt.
Ein Komma ist nicht zulässig (weder nach dem letzten Element in einem Array noch nach der letzten Eigenschaft eines Objekts).
Die Verwendung von Schlüsseln (Eigenschaftsnamen) erfordert, dass diese in doppelte Anführungszeichen eingeschlossen werden.
Dieser Code unterstützt keine mehrzeiligen Textzeichenfolgen.
Anders ausgedrückt: Dieser JSON-Code ist ungültig:
{
// One of "dark", "light", or "auto"
theme: "light",
description: "This is a description
wrapped over multiple lines for ease
of reading",
// I like LOADS of spaces!
tab-width: 8,
}
Stattdessen sollten diese Daten wie folgt geschrieben werden:
{
"theme": "light",
"description": "This is a description wrapped over multiple lines for ease of reading",
"tab-width": 8
}
JSONC ist einer von vielen Versuchen, JSON zu verbessern. Andere Formate mit ähnlichen Zielen sind YAML und JSON5. Jedes dieser Formate ist eine Teilmenge von JSON, daher ist korrektes JSON auch korrektes JSONC, YAML und JSON5. Die Formate unterscheiden sich darin, wie weit sie die JSON-Struktur erweitern.
YAML unterliegt bedeutenden Veränderungen und hat sich in der Konfiguration und gelegentlich auch in der Dokumentation etabliert. Dieses Format ist eine Mischung aus Markdown und JSON und zeichnet sich durch Einrückungen, benutzerdefinierte Datentypen und mehrzeilige Zeichenketten aus. YAML wird in Projekten wie Docker Compose, dem GitHub Actions-Workflow und dem Ruby on Rails-Framework verwendet.

Gleichzeitig ist JSON5, genau wie JSON, eine gültige JavaScript-Sprache und daher in seiner Syntax deutlich strenger. JSON5 zielt darauf ab, alle oben genannten Kritikpunkte an JSON und mehr zu beheben, bleibt aber dennoch sehr ähnlich. JSON5 wird in Chromium, Next.js und der macOS-Programmierung verwendet.
JSONC hingegen steht für „JSON mit Kommentaren“ und konzentriert sich daher ausschließlich auf die Möglichkeit, Kommentare innerhalb von JSON-Daten einzufügen. Dies bedeutet, dass es eine Kombination der beiden vorherigen Beispiele unterstützt:
{
// One of "dark", "light", or "auto"
"theme": "light",
/*
I like LOADS
of spaces!
*/
"tab-width": 8
}
JSONC unterstützt zwei gängige Kommentarformate:
- Inline-Kommentare beginnen mit // und dauern nur bis zum Ende ihrer Zeile.
- Massenkommentare beginnen mit /* und enden mit */ und können beliebig viele Zeilen enthalten.
Die dritte gängige Kommentarform – die mit dem eingebetteten Kommentar identisch ist, aber mit einem einzelnen „#“-Symbol beginnt – wird nicht unterstützt.
ملاحظة
Kommentare, die mit dem Symbol „#“ beginnen, sind in der Programmierung nicht sehr verbreitet, aber sie sind die einzige Art von Kommentar, die Bash-Skripte zulassen.
Was sind die Vor- und Nachteile von JSONC?
JSONC ist deutlich weniger verbreitet als JSON, was an sich schon ein Nachteil ist. Was bietet JSONC also, und reicht das aus, damit sich das alternative Format durchsetzen kann?
Kommentare sind oft wertvoll
Erstens bin ich persönlich der Meinung, dass Kommentare mehr Nutzen bringen als die Behebung anderer gängiger JSON-Probleme. Änderungen an der Syntax für Anführungszeichen und Kommas mögen die Sache zwar vereinfachen, bieten aber keine wesentlichen Vorteile. Kommentare in JSON-Dateien haben zwei Hauptfunktionen:
- Konfigurationsdateien: Kommentare dienen in Konfigurationsvorlagen als Beispiele oder Anleitungstexte und können auch dazu verwendet werden, zu erläutern, warum eine bestimmte Konfiguration gewählt wurde.
- Datenerläuterung: Entwickler können Kommentare zu den Daten hinzufügen, um deren Zweck zu erläutern oder zu erklären, wie sie mit anderen Daten interagieren.
ملاحظة
Kommentare können auch verwendet werden, um Teile des Codes, wie beispielsweise Quellcodedateien, zu Debugging- oder Testzwecken vorübergehend zu deaktivieren. Bei Datendateien wie JSON ist dies jedoch weniger üblich, da sie beim Datenaustausch zwischen verschiedenen Quellen leicht zu Verwirrung führen können.
Kommentare ermöglichen eine eigenständige Dokumentation; ohne sie müssten JSON-Dateien an anderer Stelle erläutert werden, an einer möglicherweise nicht offensichtlichen oder leicht zugänglichen Stelle. Eine weitere Lösungsmöglichkeit besteht darin, „Dummy“-Daten hinzuzufügen, wie zum Beispiel:
{
"theme-comment": "The theme value should be one of 'dark', 'light', or 'auto'",
"theme": "dark"
}
Das mag zwar funktionieren, ist aber fragil, da es darauf beruht, dass jedes System, das diese Daten liest, Schlüssel ignoriert, die es nicht erkennt.
Man sollte jedoch bedenken, dass Kommentare im Allgemeinen nicht hilfreich sind. Douglas Crockford, der ursprüngliche Verfasser der JSON-Definition, veranschaulicht dies vielleicht am besten:
Ich habe die Kommentare aus dem JSON entfernt, weil ich gesehen habe, dass einige Leute sie zum Speichern von Parsing-Anweisungen verwendet haben, eine Vorgehensweise, die die Kompatibilität beeinträchtigt hätte.
Mit anderen Worten: Die Kommentare sind anfällig für Missbrauch, und genau das wird durch ihr Verbot verhindert.
Es verarbeitet keine nachfolgenden Kommas oder nicht in Anführungszeichen gesetzten Tasten.
Wie ich bereits erläutert habe, halte ich dies für weniger wichtig, aber es ist dennoch ein kleiner Fehler. Wenn wir versuchen, JSON mit einem Upgrade zu reparieren, das mit früheren Versionen inkompatibel ist, sollten wir besser gleich alles beheben, was möglich ist.
Post-Separatoren sind einfacher zu pflegen, wodurch Fehler reduziert und präzisere Patches ermöglicht werden. JSON erlaubt sie aus historischen Gründen, die mit der Komplexität der JavaScript-Syntax zusammenhängen, nicht. Das können wir aber jetzt ändern, und vielleicht sollten wir es sogar tun, selbst wenn der Nutzen gering ist.
JSONC ist nicht mit JSON kompatibel.
Obwohl JSONC eine Teilmenge von JSON ist und somit alle gültigen JSON-Dateien auch gültige JSONC-Dateien sind, gilt dies nicht umgekehrt. Die meisten Tools, die JSON benötigen, funktionieren nicht, wenn man versucht, sie mit einer JSONC-Datei zu verwenden.

Für den persönlichen Gebrauch mag dies kein Problem darstellen, erschwert aber die großflächige Einführung von JSONC.
Die Vorbehandlung ist anstrengend.
Die Kompatibilität wird einfacher, wenn die Konvertierung von JSONC zu JSON unkompliziert ist.
Sie können das JSMin-Tool verwenden von Douglas Crockford Um dies zu erreichen. Die gewählte Kommentarstruktur in JSONC erfordert jedoch die Integration eines JSON-Parsers, um sicherzustellen, dass die Kommentare in ihrem Kontext korrekt erkannt werden.
Wenn die Kommentare in Spalte 0 durch ein einzelnes „#“-Symbol gekennzeichnet sind, ist die Umrechnung einfach:
<input.jsonc grep -v '^#' >output.json
Das bedeutet, dass jeder JSON-Parser problemlos aktualisiert werden kann, um JSONC zu unterstützen, anstatt substanzielle Änderungen am Code vorzunehmen oder auf ein externes Programm wie JSMin zurückzugreifen.
Wie kann ich JSONC heute verwenden?
JSONC begegnet Ihnen am häufigsten, wenn Sie Einstellungen ändern müssen. Beispielsweise liest fastfetch eine Datei. Einstellungen im JSONC-Format Dies ermöglicht es Ihnen, Notizen, Vorschläge oder alles andere hinzuzufügen, was Sie hinzufügen möchten.
Wenn Sie an Ihrem eigenen Code arbeiten und neben JSON auch JSONC verarbeiten möchten, haben Sie zwei Hauptmöglichkeiten. Erstens können Sie ein Tool wie JSMin verwenden und JSONC genauso behandeln wie JSON.
Oder Sie können eine Bibliothek verwenden, die sich damit befasst. JSONCDadurch entfällt die Abhängigkeit von einem separaten Programm. Der Fastfetch-Code verwendet die yyjson-Bibliothek, eine C-Bibliothek, die JSONC-Kommentare sowie Suffixe und Mehr verarbeitet. node-jsonc-parser Microsoft verfügt über etwas Ähnliches wie JavaScript und unterstützt auch Kommas am Ende.
JSONC bietet eine flexible Lösung für Entwickler, die Konfigurationsdaten mithilfe von Kommentaren erläutern möchten, ohne das traditionelle JSON-Format zu verändern. Während JSON für kleinere Projekte weiterhin die einfachste und gebräuchlichste Wahl ist, erleichtert JSONC die Verwaltung großer Projekte und verbessert die Zusammenarbeit im Team. Die Wahl des Formats hängt von der Art des Projekts, der Teamgröße und dem Umfang ab, in dem die Datendokumentation direkt in die Dateien eingebettet werden soll.





