JSON can be decoded to PHP arrays by using the $associative = true option. Be wary that associative arrays in PHP can be a "list" or "object" when converted to/from JSON, depending on the keys (of absence of them). You would expect that recoding and re-encoding will always yield the same JSON string, but take this example: $json = '{"0": "No", "1": "Yes"}'; $array = json_decode($json, true); // decode as associative hash print json_encode($array) . PHP_EOL;This will output a different JSON string than the original: ["No","Yes"]The object has turned into an array!Similarly, a array that doesn't have consecutive zero based numerical indexes, will be encoded to a JSON object instead of a list. $array = [ 'first', 'second', 'third', ]; print json_encode($array) . PHP_EOL; // remove the second element unset($array[1]); print json_encode($array) . PHP_EOL;The output will be: ["first","second","third"] {"0":"first","2":"third"}The array has turned into an object! In other words, decoding/encoding to/from PHP arrays is not always symmetrical, or might not always return what you expect!On the other hand, decoding/encoding from/to stdClass objects (the default) is always symmetrical. Arrays may be somewhat easier to work with/transform than objects. But especially if you need to decode, and re-encode json, it might be prudent to decode to objects and not arrays. If you want to enforce an array to encode to a JSON list (all array keys will be discarded), use: json_encode(array_values($array));If you want to enforce an array to encode to a JSON object, use: json_encode((object)$array);See also: https://www.php.net/manual/en/function.array-is-list.php