我正在尝试使用JSON搜索googlemapapi。所以,我给位置" Plymouth" - 在googlemapapi中它显示了6个结果集但是当我尝试在Json中解析时,我的长度只有2个。我也尝试了多个城市,但我得到的只是2的结果集。 下面有什么问题?
import urllib.request as UR
import urllib.parse as URP
import json
url = "http://maps.googleapis.com/maps/api/geocode/json?address=Plymouth&sensor=false"
uh = UR.urlopen(url)
data = uh.read()
count = 0
js1 = json.loads(data.decode('utf-8') )
print ("Length: ", len(js1))
for result in js1:
location = js1["results"][count]["formatted_address"]
lat = js1["results"][count]["geometry"]["location"]["lat"]
lng = js1["results"][count]["geometry"]["location"]["lng"]
count = count + 1
print ('lat',lat,'lng',lng)
print (location)
答案 0 :(得分:1)
只需将for result in js1:
替换为for result in js1['results']:
顺便说一下,如问题中的评论中所述,无需使用计数器。您可以将for
循环重写为:
for result in js1['results']:
location = result["formatted_address"]
lat = result["geometry"]["location"]["lat"]
lng = result["geometry"]["location"]["lng"]
print('lat',lat,'lng',lng)
print(location)
答案 1 :(得分:0)
如果你查看进来的json,你会发现它只有一个dict
有两个项目("results"
和"status"
)。将print('result:', result)
添加到for循环的顶部,它将打印result: status
和result: results
,因为您正在迭代该外部字典的键。这是python中的一般调试技巧...如果你没有得到你想要的东西,请输入一个打印语句来查看你得到的东西。
结果(毫不奇怪)和list
下的js1["results"]
。在for
循环中,您忽略要迭代的变量,并返回原始js1
以获取其数据。这是不必要的,在您的情况下,它隐藏了错误。如果您尝试引用result
之外的城市,则会出现错误,可能更容易看到result
是"status"
,而不是您所追求的数组。
现在进行了一些调整来解决问题
import urllib.request as UR
import urllib.parse as URP
import json
url = "http://maps.googleapis.com/maps/api/geocode/json?address=Plymouth&sensor=false"
uh = UR.urlopen(url)
data = uh.read()
count = 0
js1 = json.loads(data.decode('utf-8') )
print ("Length: ", len(js1))
for result in js1["results"]:
location = result["formatted_address"]
lat = result["geometry"]["location"]["lat"]
lng = result["geometry"]["location"]["lng"]
count = count + 1
print ('lat',lat,'lng',lng)
print (location)