2012-08-31 30 views
6

Estoy pasando una cadena con codificación JSON a json_decode() y espero que su resultado sea un tipo de objeto, pero en su lugar obtengo un tipo de cadena. ¿Cómo puedo devolver un objeto?json_decode devuelve el tipo de cadena en lugar del objeto

En la documentación, el siguiente devuelve un objeto:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
var_dump(json_decode($json)); 

Sin embargo, si json_encode() la cadena primero y luego llamo json_decode(), la salida es una cadena y no un objeto:

$json = json_encode('{"a":1,"b":2,"c":3,"d":4,"e":5}'); 
var_dump(json_decode($json)); 

Esto es solo un ejemplo simplificado. En la práctica, lo que estoy haciendo es presionar una cadena codificada en JSON para PHP a través de AJAX. Sin embargo, ilustra el problema de convertir esta cadena JSON codificada a un objeto que puedo leer en PHP, por ejemplo, "$json->a".

¿Cómo puedo devolver un tipo de objeto?

gracias por las respuestas! El contexto real para esta pregunta fue am usando una Respuesta JSON de una API. Pero cuando hago el json_decode a esta respuesta e intento acceder a los valores como - $ json = json_decode (respuesta json de la API); echo $ json-> a me da un error: el objeto de la clase stdClass No se pudo convertir a cadena

+2

¿Por qué quiere para codificar un JSON ya codificado? EX: '$ json = json_encode ('{" a ": 1," b ": 2," c ": 3," d ": 4," e ": 5}');'? – Cosmin

+6

Está codificando una cadena, no un objeto, así que obviamente obtendrá una cadena cuando la descodifique. – Musa

+0

absolutamente correcto musa.! si está pasando una cadena de cómo podría esperar para el objeto? –

Respuesta

4

La función json_encode se utiliza para codificar un objeto PHP nativo o matriz en Formato JSON.

Por ejemplo, $json = json_encode($arr) donde $arr es

$arr = array(
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
    'd' => 4, 
    'e' => 5, 
); 

devolvería la cadena $json = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'. ¡En este punto, usted hace no necesita codificarlo de nuevo con json_encode!

Para obtener su matriz de nuevo, simplemente haga json_decode($json, true).

Si se omite el true de la llamada a json_decode que va a obtener una instancia de stdClass lugar, con las diversas propiedades especificadas en la cadena JSON.

Para más referencias, ver:

http://www.php.net/manual/en/function.json-encode.php

http://www.php.net/manual/en/function.json-decode.php

+0

gracias por las respuestas! El contexto real para esta pregunta fue usar una Respuesta JSON de una API. Pero cuando hago el json_decode a esta respuesta e intento acceder a los valores como - $ json = json_decode (respuesta json de la API); echo $ json-> a me da un error: Objeto de la clase stdClass no se pudo convertir a la cadena –

+0

Ya veo ... ¿podría mostrarnos la respuesta json real con la que está trabajando? –

+0

tiene un problema! estaba recibiendo una doble json_decoded por lo que var_dump estaba dando cadena en lugar de objeto. –

0

En lugar de escribir en la matriz JSON, trate de ponerlo en una matriz PHP en primer lugar.

<?php 
$array = array(
'a' => 1, 
'b' => 2, 
'c' => 3, 
'd' => 4, 
'e' => 5 
); 
//Then json_encode() 
$json = json_encode($array); 
echo $json; 
die; 
?> 

En tu caso, estás utilizando ajax. Así que cuando usted consigue un éxito, usted puede hacer esto:

$.ajax({ 
    url: 'example.com', 
    data: { 

    }, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

Cuando, después de los datos dentro de console.log() puede agregar el JSON var como data.a, data.b ...

Además, con la cadena que providedm que no es necesario ya que es json_encode alrady en formato JSON

Cuestiones relacionadas