2012-02-03 64 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