2010-02-03 30 views
6

Si uso json_encode() en una matriz de esta manera:json_encode ¿eliminar citas de las teclas?

return json_encode(array('foo' => 'bar')); 

El retorno es:

{'foo' : 'bar'} 

La clave se pasa como un literal, y que es tropezar mi guión. Lo que realmente necesito es:

{ foo : 'bar' } 

¿El json_encode hacer eso o tengo para despojar a las cotizaciones a mí mismo con un poco de expresiones regulares feo?

+5

Su segundo ejemplo no es JSON válido. Las claves deben ser cadenas citadas. – Gumbo

Respuesta

14

Cuando la prueba esta porción de código:

echo json_encode(array('foo' => 'bar')); 
die; 

me sale:

{"foo":"bar"} 

¿Qué es JSON válida.

(Nota que estos son comillas dobles, y no simples comillas como los que posteaste)


que la salida está solicitando:

{ foo : 'bar' } 

es válida Javascript, pero es no es válido JSON - por lo que json_encode no devolverá eso.

Consulte json.org para la especificación del formato JSON - que es un subconjunto de Javascript, y no Javascript en sí.


En lugar de "pelar las cotizaciones a mí mismo con un poco de expresiones regulares fea", usted debe adaptar su código, por lo que acepta JSON válida: esto es mucho mejor, en mi opinión.

0

¿Cómo está tropezando su secuencia de comandos?

Y según JSON specification, los nombres clave son supuestos como cadenas. El segundo fragmento que publicaste no es JSON válido.

2

No, json_encode no hará esto por usted. El json specification especificamente requiere que las claves sean cadenas citadas. Esto se hace para garantizar que las claves que son palabras reservadas de JavaScript no rompan el objeto de datos.

0

Gracias a todos. No sabía eso sobre la especificación JSON. El problema estaba en mi script porque no había configurado el tipo de datos de mi función $ .ajax() en "json"

Lo que aprendí hoy - ¡JSON y Javascript no son lo mismo!