我的问题很简单,至少我希望如此,但我找不到解决方案。我有一个JSON字符串,我从一个get请求到服务器。
我的JSON的例子:
"body":[
{
"_id":"70:ee:50:05:00:aa",
"place":{
"location":[
2.4358958,
49.503012
],
"altitude":89,
"timezone":"Europe/Paris"
},
"mark":8,
"measures":{
"02:00:00:04:f8:6a":{
"res":{
"1431926951":[
7.9,
83
]
},
"type":[
"temperature",
"humidity"
]
},
"70:ee:50:05:00:aa":{
"res":{
"1431932787":[
1009.4
]
},
"type":[
"pressure"
]
}
},
"modules":[
"02:00:00:04:f8:6a"
]
},
我需要访问温度值,所以按照这个例子我会这样做:$value = body->measures->02:00:00:04:f8:6a->res->1431926951[0].
我知道我不能这样做:measures->02:00:00:04:f8:6a
。很酷的是这个难题可以解决这个问题:$module = body->modules[0]
然后我可以使用这个变量。
所以它看起来像这样:body->measures->$module->res->1431926951[0].
我似乎无法做的是最后一步:res->1431926951[0]
。这个数字看似完全随机我在JSON的其他任何地方找不到这个值所以我不能使用我为02:00:00:04:f8:6a.
做的同样的技巧
所以我的问题是如何在不知道其名称的情况下访问位于对象“ 1431926951 ”内的数组的第一个值?
非常感谢你花时间帮助我。
编辑:这是我在PHP中使用的代码
$results = json_decode($resp);
foreach($results->body as $result){
$id = $result->_id;
$lat = $result->place->location[0];
$lng = $result->place->location[1];
$module = $result->modules[0];
$type = $result->measures->$module->type[0];
$value = "1431926951";
//$test = $result->measures->$module->res->$value[0];
/*$res = $result->measures[$result->measures[0]]->res;
$test = $res[Object.keys($res)[0]][0];*/
echo 'Id: '.$id.' - Lat: '.$lat.' - Lng: '.$lng.' - test: '.$test."<br>";
}
答案 0 :(得分:2)
您可以使用Object.keys访问JavaScript中的属性名称。
var res = obj.body.measures[ obj.body.modules[0] ].res;
console.log( res[ Object.keys(res)[0] ][0]); // prints 7.9
EDIT(PHP版,只有2行):
使用PHP是相同的,但使用key和stdClass(json_decode返回stdClass)
$res = $obj->body->measures->{ $obj->body->modules[0] }->res;
echo $res->{ key( (array) $res ) }[0]; // prints 7.9
希望帮助。
答案 1 :(得分:1)
var jsonvar = { key: { key1: "value 1", key2: "value 2" } };
var key = Object.keys(jsonvar)[0];
这是我们如何使用javascript从给定的json对象获取json密钥。
解释:假设您在名为jsonvar
的javascript中有一个json变量,该变量包含一些json
数据。现在,要访问key
中包含的第一个parent json
,请使用上面显示的array
。
Object.keys(jsonvar)[0]
将返回json密钥:"key"
。我们访问jsonvar以访问对应于位置[0]
的第一个键。
希望这可以解决您的问题。
答案 2 :(得分:1)
以下是我在PHP中的表现:
<?php
$ob = '
{
"body":[
{
"_id":"70:ee:50:05:00:aa",
"place":{
"location":[
2.4358958,
49.503012
],
"altitude":89,
"timezone":"Europe/Paris"
},
"mark":8,
"measures":{
"02:00:00:04:f8:6a":{
"res":{
"1431926951":[
7.9,
83
]
},
"type":[
"temperature",
"humidity"
]
},
"70:ee:50:05:00:aa":{
"res":{
"1431932787":[
1009.4
]
},
"type":[
"pressure"
]
}
},
"modules":[
"02:00:00:04:f8:6a"
]
}
]
}';
//turn the json into a PHP object
$ob = json_decode($ob);
//pre-defined array of known module names
$modules = array("02:00:00:04:f8:6a", "70:ee:50:05:00:aa");
//loop through each moduke
foreach($modules as $module){
//get the 'res' property for that module
$res = $ob->body[0]->measures->$module->res;
//get a list of the object properties
$properties = get_object_vars($res);
//select the first property (we don't know the name) uising the current() function
$firstProperty = current($properties);
//and print it out
echo "The first property of $module is: ";
print_r($firstProperty);
echo "<br/><br/>";
}