2010-06-18 27 views
10

tengo esto:cadena JSON.parse con citas

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\" SATA2 7200rpm"}}'); 

JSONLint dice que es perfectamente válido JSON. Pero en la ejecución tengo un error JSON.parse.

Pero, si cambio de código para:

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\\" SATA2 7200rpm"}}'); 

(tenga en cuenta la doble barra invertida)

Funciona, pero ahora dice JSONLint invalid json.

¿Alguien puede ayudar a comprender este comportamiento?

+2

Me parece simple. Jsonlint está roto;) – Wolph

+0

¿De dónde viene esa cadena de entrada? es generado por un codificador JSON? – paullb

+0

@paullb no es de una variable PHP $ _POST. – mjsilva

Respuesta

15

Es una diferencia entre el formato de conexión y lo que debe escribir en el código para obtener el formato de conexión. Cuando declaras esto en código, necesitas el doble- en tu literal para que la cadena tenga una sola barra invertida (de lo contrario, interpretará \ "como una secuencia de escape para simplemente declarar un" y poner eso en tu cadena). Si imprime el valor del literal, verá una sola barra invertida.

+0

Tks Dean, creo que primero tuve que escapar del javascript y luego el JSON. Suponiendo que esto viene de PHP, ¿cómo puedo "duplicar" el escape? He intentado esto: str_replace ('\ "', '\\"', $ json) pero no está funcionando. – mjsilva

+9

Entendido: str_replace ('\\ "', '\\\\"', $ json) Hoy aprendo que también hay un infierno que escapa :) – mjsilva