Обратите внимание на этот небольшой сценарий:
$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 )
Почему PHP превращает объект JSON в класс?
Разве массив, который json_encoded
затем получает json_decoded
ТОЧНЫЙ тот же результат, не должен?
дает вам массив.
источник
Чтобы ответить на актуальный вопрос:
Взгляните поближе на вывод закодированного JSON, я немного расширил пример, который OP дает:
Формат JSON был получен из того же стандарта, что и JavaScript ( стандарт языка программирования ECMAScript ), и если вы посмотрите на формат, он выглядит как JavaScript. Это объект JSON (
{}
= объект ), имеющий свойство «материал» со значением «вещи» и свойство «вещи», значение которого является массивом строк ([]
= массив ).JSON (как JavaScript) не знает ассоциативных массивов только индексированных массивов. Таким образом, когда JSON кодирует ассоциативный массив PHP, это приведет к строке JSON, содержащей этот массив как «объект».
Теперь мы снова декодируем JSON, используя
json_decode($arrayEncoded)
. Функция декодирования не знает, откуда эта строка JSON произошла (из массива PHP), поэтому она декодирует в неизвестный объект, который находитсяstdClass
в PHP. Как вы увидите, массив строк "things" БУДЕТ декодирован в индексированный массив PHP.Также см:
Спасибо https://www.randomlists.com/things за "вещи"
источник
Хотя, как уже упоминалось, вы можете добавить сюда второй параметр, чтобы указать, что вы хотите вернуть массив:
Многие люди могут предпочесть преобразовать результаты:
Может было бы понятнее почитать.
источник
tl; dr: JavaScript не поддерживает ассоциативные массивы, поэтому JSON тоже.
В конце концов, это JSON, а не JSAAN. :)
Таким образом, PHP должен преобразовать ваш массив в объект для кодирования в JSON.
источник
Если вы декодируете json в массив, информация в этой ситуации будет потеряна.
источник
Существует также хорошая библиотека кодирования / декодирования PHP 4 json (которая даже обратно совместима с PHP 5), о которой написано в этом сообщении блога: Использование json_encode () и json_decode () в PHP4 (июнь 2009 г.) .
Конкретный код написан Михалом Мигурски и Мэттом Кнаппом:
источник