Анализ результатов Google Elevation с использованием PHP

Я новичок в JSON и парсинге. Я получаю следующие результаты при запросе повышения от Google Elevation API.

{
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 39.7391536,
      "lng": -104.9847034
    },
    "elevation": 1608.8402100
  } ]
}

При синтаксическом анализе я не знаю, как эффективно ссылаться на высоту, используя результаты json_decode. Мой сокращенный код ниже:

$json_string = file_get_contents($url);
$parsed_json = json_decode($json_string);
$geoElevation = $parsed_json->{'elevation'};

Может ли кто-нибудь сказать мне, почему я не могу получить доступ к значению «высоты», используя приведенное выше?


person user1077894    schedule 16.12.2011    source источник


Ответы (2)


Попробуй это:

$json_string = file_get_contents($url);
$parsed_json = json_decode($json_string);

echo $parsed_json->results[0]->elevation;

или если вы предпочитаете использовать массив:

$json_string = file_get_contents($url);
$parsed_json = json_decode($json_string, TRUE);

echo $parsed_json['results'][0]['elevation'];

Второй аргумент:

При значении TRUE возвращенные объекты будут преобразованы в ассоциативные массивы. из руководства json_encode.

person Book Of Zeus    schedule 16.12.2011

Вы должны использовать print_r($parsed_json), чтобы получить лучшую визуализацию вашей структуры данных:

$parsed_json
(
    [status] => OK
    [results] => Array
        (
            [0] => Array
                (
                    [location] => Array
                        (
                            [lat] => 39.739153600000001631542545510456
                            [lng] => -104.98470340000000078362063504755
                        )    
                    [elevation] => 1608.8402100000000700674718245864
                )
        )
)

Это массив, который вы получаете, используя json_decode($json_string, TRUE);. Это облегчает обход записей.

В вашем случае вы хотите:

 print $parsed_json["results"][0]["elevation"];

Обычно вы хотели бы foreach по числовым уровням. Но если вы ожидаете только один результат, то [0] вполне подойдет.

person mario    schedule 16.12.2011
comment
Спасибо за ответ. Значит неправильно ссылаюсь. Я должен анализировать его как массив, а не другой метод, который я использовал? - person user1077894; 17.12.2011
comment
Нет, вам не нужно этого делать. Но часто это облегчает. -- См. ответ BOZ для соответствующего синтаксиса. Структура остается прежней. - person mario; 17.12.2011