Para responder a 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 un poco el ejemplo que ofrece el OP:
$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 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'