3

我是 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'};

谁能告诉我为什么我不能使用上述方法访问“海拔”值?

4

2 回答 2

4

尝试这个:

$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手册

于 2011-12-16T21:13:38.373 回答
3

您应该使用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]使用起来非常好。

于 2011-12-16T21:12:11.730 回答