JSON.LOADS仅挑选2个结果集

时间:2016-02-26 03:46:13

标签: python json

我正在尝试使用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)

2 个答案:

答案 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: statusresult: 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)