Преобразование json_decode в объект

Я получаю следующий результат с json_decode

Array
(
    [0] => Array
        (
            [...] => ...
            [...] => ...
        )

    [1] => Array
        (
            [...] => ...
            [...] => ...
        )

Я хочу импортировать это в класс, чтобы я мог вызывать данные из памяти и ссылаться на них.

В ходе исследования я обнаружил следующее: Как преобразовать массив в объект, использующий stdClass ()

Однако я не уверен, что stdClass - это то, что я хочу?


person Jason    schedule 23.09.2016    source источник
comment
Как выглядит ваша строка JSON?   -  person Zoli Szabó    schedule 23.09.2016
comment
[{first_name: Jason, last_name: Pass, [...]]   -  person Jason    schedule 23.09.2016
comment
Разве вы не можете просто выполнить json_decode ($ array) (без второго варианта) или мне что-то не хватает?   -  person rjdown    schedule 23.09.2016
comment
почему вы не уверены в stdClass?   -  person Perspective    schedule 23.09.2016
comment
Если вы хотите, чтобы он перешел в определяемый пользователем класс, вы можете написать конструктор для своего класса, который принимает массив в качестве аргумента и копирует значения в соответствующие свойства.   -  person Barmar    schedule 23.09.2016


Ответы (2)


Определение функции из руководства по PHP:

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

Учитывая вашу строку JSON [{"first_name":"Jason","last_name":"Pass", [...], вы должны использовать json_decode со вторым параметром, установленным на TRUE.

Это означает, что объекты из строки JSON возвращаются в виде ассоциативных массивов. Если вы опустите второй параметр (или используете значение по умолчанию FALSE), вы получите:

array (size=2)
  0 => 
    object(stdClass)[1]
      public 'first_name' => string 'Jason' (length=5)
      public 'last_name' => string 'Pass' (length=4)
      ...
  1 => 
    object(stdClass)[2]
      ...

Это означает, что объекты из строки JSON сохраняются как объекты.

Однако массив, содержащий ваши объекты, останется массивом, потому что так и должно быть, и вы не должны заставлять его быть объектом. Для этого нет веских причин.

person Zoli Szabó    schedule 23.09.2016

Поместите объект непосредственно перед запуском массива

$arr = Array([0] => Array
    (
        [...] => ...
        [...] => ...
    )[1] => Array
    (
        [...] => ...
        [...] => ...
    ));

 $arr = (object) $arr;
person kamleshpal    schedule 23.09.2016