33

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

3 回答 3

69

您需要将东西包装在另一个中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 开始的连续数字序列,则所有键都被编码为字符串,并为每个键值对显式指定。

于 2013-03-21T22:57:49.807 回答
8

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

echo json_encode($data);

看完这篇文章后:

echo json_encode(array($data));

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

于 2016-03-05T04:57:07.590 回答
3

使用这种方式时它变得很方便,因此您可以在数组上添加更多项目

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

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

echo json_encode($data);

它会在下面输出:

{"item":[{"id":"123456", "name":"adam"}]}
于 2017-03-22T08:52:33.917 回答