0

我正在尝试使用以下方法从 JavaScript读取 JSON 信息( https://maps.googleapis.com/maps/api/geocode/json?address=Mountain+View+Amphitheatre+Parkway&sensor=false ):

$.getJSON("https://maps.googleapis.com/maps/api/geocode/json?address="+city+"+"+steet+"&sensor=false", function(json) {
if (json.status == 'ZERO_RESULTS'){
    alert('Wrong input');
}
else{
// Here I would like to read json.results.geometry.location.lat 
}

});

但它不起作用。如果我尝试阅读 json.results,我会得到 [object Object]。因为打印 json 给了我同样的结果,我认为我可以继续使用句号,但它不起作用。

之后,我尝试遍历 json.results 并在将对象解析为数组之后,但一切都不起作用。

4

3 回答 3

2

结果是一个对象数组。所以你应该尝试:

json.results[0].geometry.location.lat
于 2013-01-30T15:49:46.430 回答
1

json.results是一个数组,您必须访问其中的元素。

您拥有的代码正试图访问locationobject的属性geometry

但是因为json.results是一个数组,所以json.results.geometryundefined并且因此不能有一个属性。

如果您要检查控制台中的错误,您应该得到类似

Uncaught TypeError: Cannot read property 'location' of undefined

你想要的是访问results数组的元素,因为其中的每个元素都代表一个 gMaps 的搜索结果,然后它会保存你想要访问的信息。

例如json.results[0]会给你代表第一个搜索结果的对象, json.results[1]会给你第二个,依此类推。

所以如果你把它改成

$.getJSON("https://maps.googleapis.com/maps/api/geocode/json?address=Berlin+Alexanderplatz&sensor=false", function(json) {
if (json.status == 'ZERO_RESULTS'){
    alert('Wrong input');
}
else{
  console.log(json.results[0].geometry.location.lat) // 52.5218316
}

});

正如您所期望的那样,您将获得第一个结果的纬度。

这是一个JSBin

于 2013-01-30T15:51:54.087 回答
0

results 是一个数组,您应该在其中循环:

for (var i = 0; i < json.results.length; i++) {
     console.log(json.results[i].geometry.location.lat);
}
于 2013-01-30T15:51:37.083 回答