2013-03-21 128 views
21

当试图访问API JSON数组必须解析这样没有括号JSON数组

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

但是,当我做下面的代码

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

它返回的JSON数组没有方括号如下

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

我花了几个小时试图找出如何解决这个问题和j乌斯季想不出解决办法

回答

44

你需要用另一种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开始的连续数字 序列,所有的键被编码为字符串,并且 明确指定为每个键 - 值对。

+0

当使用该代码时,它将方括号放在所有内容之外而不是放在'item'内? – 2013-03-21 23:01:08

+0

@CurtisCrewe:对不起,错字。现在修复。 – Jon 2013-03-21 23:01:51

+0

谢谢,工作完美! – 2013-03-21 23:02:13

6

前阅读这篇文章,我有这样的:

echo json_encode($data);

阅读这篇文章后:

echo json_encode(array($data)); 

支架出现在JSON对象的开始和结束。

:)

+0

不知道为什么downvote,因为它只是为我工作(+ 1)。 – 2016-07-11 20:41:03

+0

有用,但如果你想要括号IN数据数组,只需使用如下所示:'$ MyArray = array(“something”=> [array(“foo”=>“bar”)]);'' – 2018-02-07 22:31:34

1

它使用这种方式时派上用场,这样你就可以在阵列

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

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

echo json_encode($data); 

上添加更多的项目和它下面输出继电器:

{ “项目”: {“id”:“123456”,“name”:“adam”}]}