Функция json_decode без параметров автоматически декодирует JSON в тот формат, который считает предпочтительным.
Так например json строка true будет преобразована в значение true типа boolean.
Строки false и null также переведутся в соответствующие типы.
С массивами все немного сложнее: если массив с числовыми ключами идущими по порядку загодировать через функцию json_encode, а затем декодировать через json_decode - результат будет массивом.
Если же преобразуется ассоциативный массив или в случае, когда числовые ключи идут не по порядку, при декодировании станет экземпляром класса stdObject.
Как вместо объекта, получить обычный ассоциативный массив?
Преобразовать результат json_decode в массив достаточно просто — нужно передать вторым параметром true, вот так:
json_decode($json_string, true);
Вот полный код примера:
$array = array(
'one' => 1,
'two' => 2,
);
$json = json_encode($array);
echo $json; // {"one":1,"two":2}
$result = json_decode($json, true);
var_dump($result);
//array (size=2)
// 'one' => int 1
// 'two' => int 2
Подробную документацию можно найти здесь: json_decode
Обязательно прочитайте — у этой функции есть 4 параметра. Послдение 2 используются редко, но они могут пригодиться.
Сигнатура функции:
json_decode(
string $json,
bool|null $associative = null,
int $depth = 512,
int $flags = 0
): mixed