json_decode返回一个嵌套数组?

时间:2012-02-03 22:11:05

标签: php json

我从第三方API获取了一个JSON字符串。当我使用json_decode($ json,true)将它放入数组时,我最终得到了一个嵌套数组。在我看来它应该不是这样的。有人可以解释这是否是正确的行为?

$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);

结果是:

  

array(1){[0] =>数组(12){       [ “状态”] =>       string(10)“处理”       [ “ORDERNUM”] =>       string(5)“87686”       [ “InvoiceNum”] =>       string(1)“0”       [ “PaPoNum”] =>       string(9)“100000043”       [ “ShippingCost”] =>       string(0)“”       [ “TrackingNum”] =>       string(0)“”       [ “ShippingWeight”] =>       string(0)“”       [ “CUST_NUM”] =>       string(5)“64366”       [ “entryTime”] =>       string(19)“2012-02-02 15:19:05”       [ “分支”] =>       string(1)“8”       [ “CustPoNum”] =>       string(9)“100000043”       [ “brord”] =>       string(6)“887686”}}

我想要的数组嵌套在$ myArray [0]中...... 如何获得价值:

$myArray[0]['Status']

从文档和示例中我希望$ myArray ['Status']能够正常工作。

我是否误解了或者我做错了什么或者API结果有什么问题?

2 个答案:

答案 0 :(得分:3)

使用json编码数据,当你的代码以方括号开头时,它包含带花括号的数据:[{data}],它总是一个嵌套数组。

使用$myArray[0]['Status']访问数据非常简单。 您也可以将$myArray[0]分配给$myArray,如下所示:

$myArray = $myArray[0];

然后,您可以使用以下语法访问数组的所有元素:

$myArray['Status'];

答案 1 :(得分:2)

  

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

查看该字符串的第一个和最后一个字符:[]。这是数组的JSON(和Javascript)语法。因此,您实际需要的对象是JSON数组的第一个(也是唯一的)成员。因此,当您使用PHP对其进行解码时,PHP会反映JSON结构并将您想要的对象作为数组的第一个(也是唯一的)成员。

你有两个选择。您可以在解码后使用数组语法提取所需的数据:

$myArray = $myArray[0];

或者,您可以删除substr的第一个和最后一个字符,因此数组文字不存在。请注意,这比第一个版本稳定得多。

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

请注意,如果您返回了多个对象,这将中断,因此如果远程可能,请不要使用它。