没有方括号json数组

时间:2013-03-21 22:55:07

标签: php json

尝试访问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"}}

我花了好几个小时试图弄清楚如何解决这个问题并且无法想到解决方案

4 个答案:

答案 0 :(得分:52)

您需要将内容包装在另一个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中仍然是数组[],而另外两个数组转换为对象{}。但是documentation已经这样做了:

  

编码数组时,如果键不是连续数字   序列从0开始,所有键都编码为字符串,和   为每个键值对明确指定。

答案 1 :(得分:6)

在阅读这篇文章之前,我有这个:

$date=date_create("2016-02-12"); echo date_format($date,"M d, y");

阅读这篇文章后:

echo json_encode($data);

Brackets出现在JSON对象的开头和结尾。

:)

答案 2 :(得分:3)

使用这种方式会变得很方便,因此您可以在阵列上添加更多项目

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

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

echo json_encode($data);

它将输出如下:

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

答案 3 :(得分:0)

根据您的代码:

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

您应该只使用另一个array()来强制括号。

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

这将返回您要查找的值:

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