При попытке доступа к 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"}}
Я потратил часы, пытаясь понять, как это исправить, и просто не могу придумать решение
Вам нужно обернуть вещи в другой 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, все ключи кодируются как строки и явно указываются для каждой пары ключей и значений.
Прежде чем читать этот пост, у меня было следующее:
echo json_encode($data);
После прочтения этого сообщения:
echo json_encode(array($data));
Появились скобки в начале и конце объекта JSON.
🙂
Это становится удобно при использовании этого способа, поэтому вы можете добавить больше элементов в массив
$val = array(); $val["id"]="123456"; $val["name"]="adam"; $data = array(); $data["item"][]=$val; echo json_encode($data);
И это будет ниже:
{"item": [{"id": "123456", "name": "adam"}]}