Gibt es einen praktischen Grund, Strings in Anführungszeichen für JSON Schlüssel zu verwenden?

StackOverflow https://stackoverflow.com/questions/4201441

Frage

Nach Crockford json.org , ein JSON Objekt besteht aus Mitglieder , die von aufgebaut ist Paare .

Jedes Paar von einem string gemacht wird und Wert , mit einer string als definiert sind:

  

Ein String ist eine Folge von null oder mehr   Unicode-Zeichen, in doppelt verpackt   Zitate, mit Backslash entkommt. EIN   Zeichen wird als eine einzige dargestellt   Zeichenkette. Ein String ist sehr   ähnlich wie ein C oder Java-String.

Aber in der Praxis der meisten Programmierer wissen nicht einmal, dass ein JSON-Schlüssel sollte durch doppelte Anführungszeichen gesetzt werden, da die meisten Browser nicht die Verwendung von doppelten Anführungszeichen erforderlich.

macht es keinen Sinn in doppelten Anführungszeichen rund um Ihre JSON zu stören?

Gültiges Beispiel:

{
  "keyName" : 34
}

Im Gegensatz zum ungültig:

{
   keyName : 34
}
War es hilfreich?

Lösung

Der wahre Grund, warum JSON Schlüssel in Anführungszeichen gesetzt werden sollte, verlässt sich in der Semantik von Identifikatoren von ECMAScript 3.

Reservierte Wörter nicht als Eigenschaftsnamen verwendet werden können, in Objektliteralen ohne Anführungszeichen, zum Beispiel:

({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...

Während, wenn Sie Anführungszeichen verwenden die Eigenschaftsnamen sind gültig:

({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok

Die eigene Crockford erklärt es in diesem Vortrag , sie wollten die JSON-Standard einfach zu halten, und sie würden nicht wie alle diese semantischen Beschränkungen auf, es haben:

  

....

     

Das war, als wir das entdeckt   unquoted Name Problem. Es stellt sich heraus   ECMA Script 3 ist ein reservierter Whack   Wortpolitik. Reservierte Wörter müssen   in der Schlüsselposition zitiert, das ist   wirklich ein Ärgernis. Als ich um   zu formulizing diese in einem Standard, I   wollte nicht alle die haben zu setzen   reservierte Worte in der Norm,   weil es aussehen würde wirklich dumm.

     

Zu der Zeit, ich habe versucht zu überzeugen,   Leute: Ja, Sie können schreiben   Anwendungen in JavaScript, es ist   geht tatsächlich an die Arbeit und es ist eine gute   Sprache. Ich wollte nicht sagen, dann,   zugleich: und Blick auf diese   wirklich dumm, was sie taten! Also ich   stattdessen beschlossen, lassen Sie sich einfach das Zitat   Schlüssel.
  Auf diese Weise wir müssen nicht sagen,   jemand darüber, wie Whack es ist.

     

Aus diesem Grund, an diesem Tag, Schlüssel zitiert in   JSON.

     

...

Die ECMAScript 5th Edition Standard-korrigiert diese Fehler, jetzt in einer ES5 Implementierung, auch reservierte Wörter können ohne Anführungszeichen verwendet werden, in beiden, Objektliterale und Mitglied Zugang (obj.function Ok in ES5).

Nur für das Protokoll, diese Norm in diesen Tagen durch Software-Anbieter implementiert wird, können Sie sehen, welche Browser umfassen diese Funktion auf diese Kompatibilitätstabelle (siehe reservierte Wörter als Eigenschaftsnamen )

Andere Tipps

Ja, es ist ungültig JSON und sonst in vielen Fällen abgelehnt werden, zum Beispiel jQuery 1.4+ einen Scheck hat die fehlschlagen unquoted JSON leise macht. Warum nicht kompatibel sein?

Lassen Sie uns ein anderes Beispiel:

{ myKey: "value" }
{ my-Key: "value" }
{ my-Key[]: "value" }

... alle diese würde mit Anführungszeichen gültig sein, warum nicht im Einklang stehen und sie in allen Fällen verwenden, um die Möglichkeit eines Problems zu beseitigen?

Ein weiteres gängiges Beispiel in der Web-Entwickler Welt: Es gibt Tausende von Beispielen für ungültig HTML, die in den meisten Browsern macht ... das tut es dabei eine weniger schmerzhaft zu debuggen oder halten? Gar nicht, ganz im Gegenteil.

Auch @ Matthew macht den besten Punkt von allen in den Kommentaren unten, dieses schon fehlschlägt, einen Syntaxfehler mit JSON.parse() in allen gängigen Browsern (und alle anderen nicht notierten Tasten werfen dass es richtig) zu implementieren, Sie können es testen hier .

YAML, die in der Tat ist ein Ober von JSON, unterstützt, was Sie tun wollen. Obwohl seine ein Obermenge, es können Sie es so einfach halten, wie Sie wollen.

YAML ist ein Hauch frischer Luft, und es kann sich lohnen, Ihre Zeit, einen Blick darauf zu werfen. Der beste Ort zum Start ist hier: http://en.wikipedia.org/wiki/YAML

Es gibt Libs für jede Sprache unter der Sonne, einschließlich JS, zB https://github.com/ nodeca / js-yaml

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top