Il vero motivo per cui le chiavi JSON dovrebbero essere tra virgolette, si basa sulla semantica degli identificatori di ECMAScript 3.
Le parole riservate non possono essere utilizzate come nomi di proprietà negli oggetti letterali senza virgolette, ad esempio:
({function: 0})
({if: 0})
({true: 0})
Mentre se usi le virgolette i nomi delle proprietà sono validi:
({"function": 0})
({"if": 0})
({"true": 0})
Il proprio Crockford lo spiega in questo discorso , volevano mantenere semplice lo standard JSON e non vorrebbero avere tutte quelle restrizioni semantiche su di esso:
....
Fu allora che scoprimmo il problema del nome non quotato. Si scopre che ECMA Script 3 ha una politica di parole riservate whack. Le parole riservate devono essere citate nella posizione chiave, il che è davvero un fastidio. Quando sono arrivato a formularlo in uno standard, non volevo mettere tutte le parole riservate nello standard, perché sarebbe sembrato davvero stupido.
A quel tempo, stavo cercando di convincere le persone: sì, puoi scrivere applicazioni in JavaScript, in realtà funzionerà ed è un buon linguaggio. Non volevo dire, quindi, allo stesso tempo: e guarda questa cosa davvero stupida che hanno fatto! Quindi ho deciso, invece, di citare solo le chiavi.
In questo modo, non dobbiamo dire a nessuno di quanto sia schifoso.
Ecco perché, fino ad oggi, le chiavi sono quotate in JSON.
...
Lo standard ECMAScript 5a edizione risolve questo problema, ora in un'implementazione ES5, anche le parole riservate possono essere utilizzate senza virgolette, sia nei letterali oggetto che nell'accesso ai membri ( obj.function
Ok in ES5).
Solo per la cronaca, questo standard viene implementato in questi giorni dai fornitori di software, puoi vedere quali browser includono questa funzione in questa tabella di compatibilità (vedi Parole riservate come nomi di proprietà )