Как получить доступ к объекту JSON, не зная его имени (а это не в массиве)

Моя проблема довольно проста, по крайней мере, я на это надеюсь, но я просто не могу найти решение. У меня есть строка 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>";
}

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

Посмотреть демо

РЕДАКТИРОВАТЬ (версия PHP, только 2 строки):

С PHP тоже самое но с использованием ключ а также StdClass (json_decode возвращается StdClass)

$res = $obj->body->measures->{ $obj->body->modules[0] }->res;
echo $res->{ key( (array) $res ) }[0]; // prints 7.9

Посмотреть демо

Надеюсь помочь.

2

Другие решения

Вот как я это сделал в 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/>";
}
1

var jsonvar = { key: { key1: "value 1", key2: "value 2" } };
var key = Object.keys(jsonvar)[0];

Вот как мы можем получить ключ json из данного объекта json, используя javascript.

Explaination: Допустим, у вас есть переменная json в javascript с именем jsonvar который держит некоторые json данные. Теперь, чтобы получить доступ к первому key содержалась в parent json, а затем использовать array как показано выше.

Object.keys(jsonvar)[0]

вернет ключ json: "key", Мы обращаемся к jsonvar для доступа к первому ключу, который соответствует позиции [0],

Надеюсь, что это может решить вашу проблему.

1
По вопросам рекламы [email protected]