@AndreasN is correct: el JSON specification dicta el uso de comillas para que realmente sea JSON. Si no utiliza comillas, puede ser un literal de objeto válido en Javascript, pero no es JSON. Otros servicios, además del Javascript del lado del navegador, usan JSON (por ejemplo, servicios web que utilizan php, Java, etc.) y si construyes una cadena que carece de comillas, no hay garantía de que se analizará correctamente, aunque sospecho que la mayoría de las implementaciones serían lo suficientemente robusto para hacerlo.
FYI es peligroso en Javascript utilizar directamente eval() en cadenas JSON de fuentes que no pueden evitar ataques maliciosos. Una vez más, vea el JSON site que brinda más explicaciones, así como un archivo javascript muy corto que analiza cadenas JSON de forma segura en objetos Javascript.
edición: supongo que técnicamente su pregunta original no se trata de JSON, sino más bien la sintaxis del Javascript para objetos literales. La diferencia es que los objetos construible a partir de una cadena JSON excluirá a muchos otros objetos literales posibles, por ejemplo:
var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
counter: 0,
pow: function(x) { return x+1; },
zap: function(y) { return (counter += y); }
};
var c = {
all: [a,aname],
animals: a,
names: aname,
};
objetos literales "a" y "aname" se puede expresar en JSON (mediante la adición de cotizaciones a los nombres de propiedad) . Pero los literales de objeto "b" y "c" no pueden. El literal del objeto "b" contiene funciones (no permitidas en JSON). El literal de objeto "c" anterior contiene referencias a otras variables de una manera que no es representable en JSON porque algunas de las referencias se comparten. Si realiza un cambio en c.names
, también cambiará c.all[1]
ya que comparten una referencia a la misma variable. JSON solo puede expresar objetos que tienen una estructura de árbol (por ejemplo, cada subelemento del objeto global es independiente).
IE también. Incluso IE6 lo acepta. – Tomalak
sí, no he notado ningún problema con el método sin cita – nickf