Подтвердить что ты не робот

Квадратная скобка json array

При попытке доступа к API массив JSON должен быть проанализирован следующим образом

{"item":[{"id":"123456", "name":"adam"}]}

Но когда я делаю следующий код

$data = array("item" => array("id" => "123456", "name" => "adam"));
echo json_encode($data);

он возвращает массив json без квадратных скобок, как показано ниже.

{"item":{"id":"123456","name":"adam"}}

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

4b9b3361

Ответ 1

Вам нужно обернуть вещи в другой array:

$data = array("item" => array(array("id" => "123456", "name" => "adam")));

Это будет более понятным, если мы будем использовать эквивалентный синтаксис массива PHP 5.4:

$data = [ "item" => [ ["id" => "123456", "name" => "adam"] ] ];

Сравните это с JSON:

        { "item":   [ {"id":"123456", "name":"adam"      } ] }

Единственное, что нужно объяснить, - это то, почему один из массивов PHP остается массивом [] в JSON, а два других преобразуются в объект {}. Но документация уже делает это:

При кодировании массива, если ключи не являются непрерывными числовыми последовательность, начинающаяся с 0, все клавиши кодируются как строки, и явно указывается для каждой пары ключ-значение.

Ответ 2

Прежде чем читать этот пост, у меня было следующее:

echo json_encode($data);

После прочтения этого сообщения:

echo json_encode(array($data));

Появились скобки в начале и конце объекта JSON.

:)

Ответ 3

Это становится удобно при использовании этого способа, поэтому вы можете добавить больше элементов в массив

$val = array();
$val["id"]="123456";
$val["name"]="adam";

$data = array();
$data["item"][]=$val;

echo json_encode($data);

И это будет выглядеть ниже:

{ "item": [{ "id": "123456", "name": "adam" }]}