我从第三方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结果有什么问题?
答案 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);
请注意,如果您返回了多个对象,这将中断,因此如果远程可能,请不要使用它。