2012-01-18 24 views
12

Estoy un poco confundido aquí. si me pasa una variable a json_decode, no funciona:¿Por qué json_decode no funciona para mí?

$stringJSON = $_GET['jsonstring']; 
echo $stringJSON; 
$stringObject = json_decode($stringJSON); 
var_export($stringObject); 

El primer eco me muestra correctamente la cadena JSON pasé, por ejemplo,

{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"} 

El segundo eco muestra NULL. Así que agarrar la cuerda desde el primer eco y escribir el siguiente código:

$stringObject = json_decode("{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}"); 
var_export ($stringObject); 

Y ¿Qué dice usted, que me muestra la matriz correctamente decodificado. La cadena es absolutamente igual, incluso mantuve los caracteres de escape. O tal vez ellos son el problema?

Respuesta

24

Parece que su servidor tiene habilitado magic_quotes_gpc. O bien disable it o ejecute $stringJSON a través de stripslashes() antes de usarlo.

$stringJSON = get_magic_quotes_gpc() ? 
    stripslashes($_GET['jsonstring']) : $_GET['jsonstring']; 
+1

Se romperá el contenido si contiene texto codificado en UTF, ya que también se eliminará – tom10271

+0

@aokaddaoc tienes razón, por supuesto. La mejor opción es deshabilitar comillas mágicas – Phil

1

Si muestra una cadena con barras en echo, significa que la cadena tiene barras en ella. Esa no es una cadena JSON válida, las barras no pertenecen allí. Si pega esa cadena en PHP, las barras son evaluadas por PHP. La cadena literal "\"" en el código fuente de PHP evalúa la cadena ", por lo que las barras se eliminan de manera efectiva y está decodificando una cadena JSON válida.

Sospecho que tiene Magic Quotes en el que está insertando las barras en valores GET, apáguelos.

5

Este

[{\"Name\":\"name\",\"Description\":\"\"] 

necesita ser

[{\"Name\":\"name\",\"Description\":\"\"}] 

Te estas perdiendo el cierre }

+0

Es extraño que el segundo ejemplo del PO funcione en absoluto – Phil

1

Este es un problema citar: Pruebe lo siguiente

$stringObject = json_decode("{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}"); 
echo $stringObject; 
var_export ($stringObject); 

como ves, los $ stringObject tiene sin comillas (pero la que proviene de $ _GET los tiene)

lo que puede necesitar

$stringJSON = $_GET['jsonstring']; 
$stringObject = json_decode(stripslashes($stringJSON)); 
var_export($stringObject); 
0

plazo json_decode dos veces.

$str = json_decode($jsonData,true); 
$str = json_decode($str,true); 

Puede ayudar a alguien.

1
json_encode($str, JSON_UNESCAPED_SLASHES); 

puede ayudarle.

Cuestiones relacionadas