2012-02-03 94 views
1

我從第三方API獲取JSON字符串。當我使用json_decode($ json,true)將它放入一個數組時,我最終得到一個嵌套數組。在我看來,它不應該是這樣的。有人可以解釋這是否是正確的行爲?json_decode返回一個嵌套的數組?

$obj = getStatus('100000043'); 
var_dump($obj); 

getStatus調用第三方API。的var_dump的結果是:

串(245) 「[{」 狀態 「:」 處理中 「 」ORDERNUM「: 」87「, 」InvoiceNum「: 」0「, 」PoNum「:」 100000043 「,」ShippingCost「:」「,」TrackingNum「:」「,」ShippingWeight「:」「,」cust_num「:」123「,」entryTime「:」2012-02-02 15:19:05「,」分支 「:」 0" , 「CustPoNum」: 「43」, 「brord」: 「12345」}]」

好了,我進行解碼,以數組:

$myArray = json_decode($obj, true); 
var_dump($myArray); 

結果是:

陣列(1){[0] =>陣列(12){ [ 「狀態」] => 串(10) 「處理」 [ 「ORDERNUM」] => 串(5)「 87686" [ 「InvoiceNum」] => 串(1)爲 「0」 [ 「PaPoNum」] => 串(9) 「100000043」 [ 「ShippingCost」] => 串(0) 「」 [ 「TrackingNum」] => 串(0) 「」 [ 「ShippingWeight」] => 串(0) 「」 [ 「CUST_NUM」] => 串(5) 「64366」 [「entryT ime「] => string(19)」2012-02-02 15:19:05「 [」branch「] => string(1)」8「 [」CustPoNum「] => string(9) ) 「100000043」 [ 「brord」] => 串(6) 「887686」}}

欲嵌套$ myArray的內陣列[0] ... 如何獲得的值出:

$myArray[0]['Status'] 

從文檔和示例我希望$ myArray ['狀態']工作。

我誤解了,或者我做錯了什麼或者有什麼關於API結果的東西?

+0

爲什麼你不只是'$ myArray的=變通辦法:

$myArray = $myArray[0]; 

然後,您可以使用此語法訪問數組中的所有元素$ myArray [0];'只是一個建議... – 2012-02-03 22:14:15

+0

你指的是什麼文檔? – Gumbo 2012-02-03 22:14:37

回答

3

用json編碼的數據,當你的代碼以一個方括號開始,那麼它包含帶花括號的數據:[{data}],它總是會是一個嵌套數組。

使用$myArray[0]['Status']訪問數據非常簡單。 還可以分配給$myArray[0]$myArray這樣的:

$myArray['Status']; 
+0

謝謝!與json合作對我來說是新的。現在我知道像這樣訪問它並不是一種詭計:) – 2012-02-03 22:34:00

2

string(245)「[{」Status「:」Processing「,」OrderNum「:」87「,」InvoiceNum「:」0「,」PoNum「:」100000043「,」ShippingCost「 「」TrackingNum「:」「」ShippingWeight「:」「,」cust_num「:」123「,」entryTime「:」2012-02-02 15:19:05「,」分支「:」0「,」 CustPoNum 「:」 43" , 「brord」: 「12345」}]」

看那個字符串的第一個和最後一個字符:[]。這是數組的JSON(和Javascript)語法。所以你實際需要的對象是JSON數組的第一個(也是唯一的)成員。因此,當您使用PHP對其進行解碼時,PHP會反映JSON結構,並將您想要的對象作爲數組的第一個(也是唯一)成員。

你有兩種選擇。你可以只得到解碼之後提取與數組語法你想要的數據:

$myArray = $myArray[0]; 

或者,你可以刪除substr第一和最後一個字符,所以數組文本不存在。請注意,這比第一個版本要穩定得多。

$myArray = json_decode(substr($obj, 1, -1), true); 

注意,這將打破如果你有一個以上的對象中返回,因此,如果這是一個遙遠的可能性不使用它。

+0

謝謝!這有助於很多 – 2012-02-03 22:33:21