Laut Crockfords json.org besteht ein JSON- Objekt aus Mitgliedern , die aus Paaren bestehen .
Jedes Paar besteht aus einer Zeichenfolge und einem Wert , wobei eine Zeichenfolge wie folgt definiert ist:
Eine Zeichenfolge ist eine Folge von null oder mehr Unicode-Zeichen, die in doppelte Anführungszeichen gesetzt werden und Backslash-Escapezeichen verwenden. Ein Zeichen wird als einzelne Zeichenfolge dargestellt. Eine Zeichenfolge ähnelt stark einer C- oder Java-Zeichenfolge.
In der Praxis wissen die meisten Programmierer jedoch nicht einmal, dass ein JSON-Schlüssel von doppelten Anführungszeichen umgeben sein sollte, da die meisten Browser keine doppelten Anführungszeichen benötigen.
Ist es sinnvoll, sich die Mühe zu machen, Ihren JSON in doppelte Anführungszeichen zu setzen?
Gültiges Beispiel:
{
"keyName" : 34
}
Im Gegensatz zum ungültigen:
{
keyName : 34
}
quelle
Antworten:
Der wahre Grund, warum JSON-Schlüssel in Anführungszeichen stehen sollten, beruht auf der Semantik der Bezeichner von ECMAScript 3.
Reservierte Wörter können in Objektliteralen ohne Anführungszeichen nicht als Eigenschaftsnamen verwendet werden. Beispiel:
Wenn Sie Anführungszeichen verwenden, sind die Eigenschaftsnamen gültig:
Der eigene Crockford erklärt es in diesem Vortrag , sie wollten den JSON-Standard einfach halten und sie möchten nicht all diese semantischen Einschränkungen haben:
Der ECMAScript 5th Edition Standard behebt dieses Problem. In einer ES5-Implementierung können jetzt sogar reservierte Wörter ohne Anführungszeichen verwendet werden, sowohl in Objektliteralen als auch im Mitgliederzugriff (
obj.function
in Objektliteralen Ok in ES5).Nur zur Veranschaulichung: Dieser Standard wird derzeit von Softwareanbietern implementiert. In dieser Kompatibilitätstabelle können Sie sehen, welche Browser diese Funktion enthalten (siehe Reservierte Wörter als Eigenschaftsnamen ).
quelle
parse
undstringify
Methoden.Ja, es ist ungültiges JSON und wird in vielen Fällen anderweitig abgelehnt. Beispielsweise verfügt jQuery 1.4+ über eine Prüfung, die dazu führt, dass nicht zitiertes JSON stillschweigend fehlschlägt. Warum nicht konform sein?
Nehmen wir ein anderes Beispiel:
... all dies wäre mit Anführungszeichen gültig. Warum nicht konsistent sein und sie in allen Fällen verwenden, um die Möglichkeit eines Problems auszuschließen?
Ein weiteres häufiges Beispiel in der Welt der Webentwickler: Es gibt Tausende von Beispielen für ungültiges HTML, das in den meisten Browsern gerendert wird. Ist das Debuggen oder Verwalten dadurch weniger schmerzhaft? Überhaupt nicht, ganz im Gegenteil.
Auch @ Matthew macht den besten Punkt von allen in den Kommentaren unten, dies schlägt bereits fehl, nicht zitierte Schlüssel werfen einen Syntaxfehler mit
JSON.parse()
in allen gängigen Browsern (und allen anderen, die es korrekt implementieren), können Sie es hier testen .quelle
JSON.parse
ebenfalls korrekt ablehnen.YAML, eine Obermenge von JSON, unterstützt, was Sie tun möchten. Obwohl es eine Obermenge ist, können Sie es so einfach halten, wie Sie möchten.
YAML ist ein Hauch frischer Luft und es kann sich lohnen, sich das anzuschauen. Der beste Startpunkt ist hier: http://en.wikipedia.org/wiki/YAML
Es gibt Bibliotheken für jede Sprache unter der Sonne, einschließlich JS, z. B. https://github.com/nodeca/js-yaml
quelle