JSON для кодирования/декодирования формата JSON - возвращает stdClass вместо массива в PHP
обратите внимание на этот маленький скрипт:
$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
дают точно такой же результат?
7 ответов:
взгляните поближе на второй параметр
json_decode($json, $assoc, $depth)
at https://secure.php.net/json_decode
ответить на актуальный вопрос:
почему PHP превращает объект JSON в класс?
взгляните поближе на вывод закодированного JSON, я расширил пример, который 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"]}
формат JSON был получен из того же стандарта, что и JavaScript (Стандарт Языка Программирования ECMAScript), и если вы посмотрите на формат, похоже, Яваскрипт. Это JSON объект (
{}
= object) имея свойство "вещи" со значением "вещи" и имеет свойство "вещи" с его значением, являющимся массивом строк ([]
= array).JSON (как JavaScript) не знает ассоциативные массивы только индексированные массивы. поэтому, когда JSON кодирует ассоциативный массив PHP, это приведет к строке JSON, содержащей этот массив в качестве "объекта".
теперь мы декодирование JSON снова с помощью
json_decode($arrayEncoded)
. Функция декодирования не знает, откуда взялась эта строка JSON (массив PHP), поэтому она декодируется в неизвестный объект, который являетсяstdClass
в PHP. Как вы увидите, массив строк "things" будет декодироваться в индексированный массив PHP.Смотрите также:
- RFC 4627-тип носителя application / json для объекта JavaScript
- RFC 7159-нотация объекта JavaScript (JSON) Данные Interchang
- PHP Manual-Arrays
спасибо https://www.randomlists.com/things за "вещи"
хотя, как уже упоминалось, вы можете добавить второй параметр здесь, чтобы указать, что вы хотите вернуть массив:
$array = json_decode($json, true);
многие люди могут предпочесть, чтобы бросить результаты вместо этого:
$array = (array)json_decode($json);
Это может быть более понятным для чтения.
tl;dr: JavaScript не поддерживает ассоциативные массивы, поэтому и JSON тоже.
В конце концов, это JSON, а не JSAAN. :)
поэтому PHP должен преобразовать ваш массив в объект для кодирования в JSON.
существует также хорошая библиотека кодирования / декодирования PHP 4 json (то есть даже обратная совместимость PHP 5), написанная в этом блоге:используя json_encode () и json_decode () в PHP4 (июнь 2009).
конкретный код Михал Мигурски и Мэтт Кнапп:
- JSON-PHP / январь 2005
- код:http://mike.teczno.com/JSON/JSON.phps
- Предложение Груша : http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- Пакета Pear: http://pear.php.net/package/Services_JSON