Ya no tienes que buscar más en otras webs porque llegaste al espacio exacto, contamos con la solución que necesitas y sin liarte.
Solución:
Sí, necesitas comillas. Esto es para simplificarlo y evitar tener que tener otro método de escape para las palabras clave reservadas de JavaScript, es decir for:"foo"
.
Tienes razón al usar cadenas como el key. Aquí hay un extracto de RFC 4627: el tipo de medio application/json para la notación de objetos de JavaScript (JSON)
2.2. Objetos
Una estructura de objeto se representa como un par de corchetes que rodean cero o más pares de nombre/valor (o miembros). Un nombre es un
string. Un solo dos puntos viene después de cada nombre, separando el nombre del valor. Una sola coma separa un valor del siguiente nombre. Los nombres dentro de un objeto DEBERÍAN ser únicos.
object = begin-object [ member *( value-separator member ) ]
end-object
member = string name-separator value
[…]
2.5. Instrumentos de cuerda
La representación de cadenas es similar a las convenciones utilizadas en la familia de lenguajes de programación C. A string comienza y termina con comillas. […]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
Lea el RFC completo aquí.
Desde 2.2. Objetos
Una estructura de objeto se representa como un par de corchetes que rodean cero o más pares de nombre/valor (o miembros). Un nombre es un string.
y de 2.5. Instrumentos de cuerda
A string comienza y termina con comillas.
Entonces diría que de acuerdo con el estándar: sí, siempre debe citar el key (aunque algunos analizadores pueden ser más indulgentes)
Sección de Reseñas y Valoraciones
Al final de la web puedes encontrar las notas de otros sys admins, tú incluso puedes insertar el tuyo si te apetece.