json使用PHP解码并获取值

时间:2014-10-17 15:32:10

标签: php json string

我有一个JSON字符串,我想获得该值。

$s='{
"subscriptionId" : "51c04a21d714fb3b37d7d5a7",
"originator" : "localhost",
"contextResponses" : [
{
    "contextElement" : {
    "attributes" : [
      {
        "name" : "temperature",
        "type" : "centigrade",
        "value" : "26.5"
      }
    ],
    "type" : "Room",
    "isPattern" : "false",
    "id" : "Room1"
    },
     "statusCode" : {
     "code" : "200",
     "reasonPhrase" : "OK"
   }
 }
]
}';

以下是我使用的代码,但它没有用。

$result = json_decode($s,TRUE); //decode json string
$b=$result ['contextResponses']['contextElement']['value']; //get the value????
echo $b;

1 个答案:

答案 0 :(得分:0)

ContextResponses包含一个数字索引数组(只有一个项目),value属性比您尝试引用的内容(它位于属性数组中)更深层嵌套。这似乎是你需要的:

$b = $result['contextResponses'][0]['contextElement']['attributes'][0]['value'];

在阅读这样的JSON序列化数据结构时,您需要确保并记下每个开头[{,因为它们对于您如何引用这些项目具有重要意义跟着它。您也可以考虑在调查中使用类似var_dump($result)的内容,因为这会在反序列化后显示数据的结构,通常会使其更容易理解。

另外,在看这样的事情时适当的缩进会有所帮助。使用http://jsonlint.com之类的内容复制/粘贴您的JSON,以便轻松重新格式化。如果您的结构如下所示,嵌套级别将变得更加明显。

{
    "subscriptionId": "51c04a21d714fb3b37d7d5a7",
    "originator": "localhost",
    "contextResponses": [
        {
            "contextElement": {
                "attributes": [
                    {
                        "name": "temperature",
                        "type": "centigrade",
                        "value": "26.5"
                    }
                ],
                "type": "Room",
                "isPattern": "false",
                "id": "Room1"
            },
            "statusCode": {
                "code": "200",
                "reasonPhrase": "OK"
            }
        }
    ]
}