我有一个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;
答案 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"
}
}
]
}