JSON Spec: la chiave deve essere circondata da virgolette?

Esempio: il seguente codice è valido contro la specifica JSON ?

{ precision: "zip" } 

O dovrei sempre usare la seguente syntax? (E se sì, perché?)

 { "precision": "zip" } 

Non ho davvero trovato qualcosa a riguardo nelle specifiche JSON. Anche se usano citazioni attorno alle loro chiavi nei loro esempi. (Quindi lo farò anche io per ora)

Sì, hai bisogno di virgolette. Questo per renderlo più semplice e per evitare di avere un altro metodo di escape per le parole chiave riservate di javascript, ovvero {for:"foo"} .

Sei corretto usare stringhe come chiave. Ecco un estratto da RFC 4627 – L’applicazione / json Media Type per JavaScript Object Notation (JSON)

2.2. Oggetti

Una struttura di object è rappresentata come una coppia di parentesi graffe che circondano zero o più coppie nome / valore (o membri). Un nome è una stringa . Un singolo due punti viene dopo ogni nome, separando il nome dal valore. Una singola virgola separa un valore da un nome seguente. I nomi all’interno di un object DOVREBBE essere unici.

object = begin-object [ member *( value-separator member ) ] end-object

member = string name-separator value

[…]

2.5. stringhe

La rappresentazione di stringhe è simile alle convenzioni utilizzate nella famiglia di linguaggi di programmazione C. Una stringa inizia e finisce con virgolette. […]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

Leggi l’intero RFC qui .

Dal 2.2. Oggetti

Una struttura di object è rappresentata come una coppia di parentesi graffe che circondano zero o più coppie nome / valore (o membri). Un nome è una stringa.

e dal 2,5. stringhe

Una stringa inizia e finisce con virgolette.

Quindi direi che secondo lo standard: sì, dovresti sempre citare la chiave (anche se alcuni parser potrebbero essere più indulgenti)

Sì, le quotazioni sono obbligatorie. http://json.org/ dice:

 string "" " chars " 

Dal momento che puoi inserire la notazione puntata “parent.child” e non devi mettere un genitore [“figlio”] che sia anche valido e utile, direi che entrambi i modi sono tecnicamente accettabili. Tutti gli analizzatori dovrebbero fare entrambe le cose bene. Se il tuo parser non ha bisogno di virgolette sulle chiavi, probabilmente è meglio non metterle (risparmia spazio). Ha senso chiamarli stringhe perché è quello che sono, e dal momento che le parentesi quadre ti danno la possibilità di usare i valori per le chiavi in ​​sostanza ha perfettamente senso non farlo. In Json puoi mettere …

 >var keyName = "someKey"; >var obj = {[keyName]:"someValue"}; >obj Object {someKey: "someValue"} 

va bene senza problemi, se hai bisogno di un valore per una chiave e nessuno citato non funzionerà, quindi se non lo fa, non puoi, quindi non lo farai “non hai bisogno di virgolette sulle chiavi”. Anche se è giusto dire che sono tecnicamente stringhe. La logica e l’uso argomentano diversamente. Né esce ufficialmente Object {“someKey”: “someValue”} per obj nel nostro esempio viene eseguito dalla console di qualsiasi browser.