Observe este pequeño guión:
$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 json_encoded
luego json_decoded
produzca el mismo resultado EXACTO?
te da una matriz.
fuente
Para responder a la pregunta real:
Eche un vistazo más de cerca a la salida del JSON codificado, he extendido un poco el ejemplo que ofrece el OP:
El formato JSON se derivó del mismo estándar que JavaScript ( estándar del lenguaje de programación ECMAScript ) y, si observa el formato, parece JavaScript. Es un objeto JSON (
{}
= objeto ) que tiene una propiedad "cosas" con un valor "cosas" y tiene una propiedad "cosas", siendo su valor una matriz de cadenas ([]
= matriz ).JSON (como JavaScript) no conoce matrices asociativas solo matrices indexadas. Entonces, cuando JSON codifica una matriz asociativa 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 está decodificando en un objeto desconocido, que estástdClass
en PHP. Como verá, la matriz de cadenas de "cosas" se decodificará en una matriz PHP indexada.Ver también:
Gracias a https://www.randomlists.com/things por las 'cosas'
fuente
Aunque, como se mencionó, podría agregar un segundo parámetro aquí para indicar que desea que se devuelva una matriz:
Es posible que muchas personas prefieran emitir los resultados en su lugar:
Podría ser más claro de leer.
fuente
tl; dr: JavaScript no admite matrices asociativas, por lo tanto, tampoco JSON.
Después de todo, es JSON, no JSAAN. :)
Entonces PHP tiene que convertir su matriz en un objeto para codificar en JSON.
fuente
Si decodifica el json en una matriz, la información se perderá en esta situación.
fuente
También hay una buena biblioteca de codificación / decodificación json de PHP 4 (que es incluso compatible con PHP 5 inversa) 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 Matt Knapp:
fuente