2013-03-21 134 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」}]}