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:
({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...
Wenn Sie Anführungszeichen verwenden, sind die Eigenschaftsnamen gültig:
({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok
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:
....
Zu diesem Zeitpunkt entdeckten wir das Problem des nicht zitierten Namens. Es stellt sich heraus, dass ECMA Script 3 eine Whack-Richtlinie für reservierte Wörter enthält. Reservierte Wörter müssen an der Schlüsselposition zitiert werden, was wirklich ein Ärgernis ist. Als ich dazu kam, dies in einen Standard zu formulieren, wollte ich nicht alle reservierten Wörter in den Standard einfügen müssen, weil es wirklich dumm aussehen würde.
Zu der Zeit habe ich versucht, die Leute zu überzeugen: Ja, Sie können Anwendungen in JavaScript schreiben, es wird tatsächlich funktionieren und es ist eine gute Sprache. Ich wollte also nicht gleichzeitig sagen: und sieh dir diese wirklich dumme Sache an, die sie getan haben! Also habe ich beschlossen, stattdessen nur die Schlüssel zu zitieren.
Auf diese Weise müssen wir niemandem erzählen, wie verrückt es ist.
Aus diesem Grund werden Schlüssel bis heute in JSON zitiert.
...
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 ).