print json_encode ejemplo php json

ejemplo - json_encode/json_decode-devuelve stdClass en lugar de Array en PHP



return json php (6)

Observe este pequeño guion:

$array = array(''stuff'' => ''things''); print_r($array); //prints - Array ( [stuff] => things ) $arrayEncoded = json_encode($array); echo $arrayEncoded . "<br />"; //prints - {"stuff":"things"} $arrayDecoded = json_decode($arrayEncoded); print_r($arrayDecoded); //prints - stdClass Object ( [stuff] => things )

¿Por qué PHP convierte el objeto JSON en una clase?

¿No debería una matriz que está json_encoded json_decoded rendir el mismo resultado EXACTO?


Para responder la pregunta real:

¿Por qué PHP convierte el objeto JSON en una clase?

Eche un vistazo más de cerca a la salida del JSON codificado, he extendido el ejemplo que OP está dando un poco:

$array = array( ''stuff'' => ''things'', ''things'' => array( ''controller'', ''playing card'', ''newspaper'', ''sand paper'', ''monitor'', ''tree'' ) ); $arrayEncoded = json_encode($array); echo $arrayEncoded; //prints - {"stuff":"things","things":["controller","playing card","newspaper","sand paper","monitor","tree"]}

El formato JSON se derivó del mismo estándar que JavaScript ( estándar de lenguaje de programación ECMAScript ) y si se mira el formato se parece a JavaScript. Es un objeto JSON ( {} = objeto ) que tiene una propiedad "cosas" con valor "cosas" y tiene una propiedad "cosas" cuyo valor es una matriz de cadenas ( [] = matriz ).

JSON (como JavaScript) no conoce las matrices asociativas solo las matrices indexadas. Entonces cuando JSON codifica una matriz asociativa de PHP, esto dará como resultado una cadena JSON que contiene esta matriz como un "objeto".

Ahora estamos decodificando el JSON nuevamente usando json_decode($arrayEncoded) . La función de decodificación no sabe de dónde se originó esta cadena JSON (una matriz de PHP) por lo que se está decodificando en un objeto desconocido, que es stdClass en PHP. Como verá, la matriz de "cosas" de cadenas se decodificará en una matriz indexada de PHP.

Ver también:

Gracias a https://www.randomlists.com/things por las ''cosas''


Aunque, como se mencionó, puede agregar un segundo parámetro aquí para indicar que desea que se devuelva una matriz:

$array = json_decode($json, true);

Muchas personas pueden preferir lanzar los resultados en su lugar:

$array = (array)json_decode($json);

Puede ser más claro para leer.



También hay una buena biblioteca de codificación / decodificación de PHP 4 json (que incluso es compatible inversamente con PHP 5) escrita en esta publicación de blog: Uso de json_encode () y json_decode () en PHP4 (junio de 2009) .

El código concreto es de Michal Migurski y de Matt Knapp:


tl; dr: JavaScript no admite matrices asociativas, por lo tanto, tampoco lo hace JSON.

Después de todo, es JSON, no JSAAN. :)

Entonces PHP tiene que convertir su matriz en un objeto para codificar en JSON.


$arrayDecoded = json_decode($arrayEncoded, true);

te da una matriz.