Квадратная скобка 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"}}
Я потратил часы, пытаясь понять, как это исправить, и просто не могу придумать решение
Ответы
Ответ 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" }]}