2016-02-26 65 views
0

我正在嘗試使用JSON通過googlemapapi進行搜索。所以,我給位置「普利茅斯」 - 在googlemapapi它顯示6結果集,但是當我嘗試在Json中解析時,我得到的只有2的長度。我嘗試了多個城市,但我得到的結果集是2 。 下面有什麼問題?JSON.LOADS僅挑選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) 
+1

你爲什麼不在你的for循環使用效果? –

+0

如果我只是使用result [「formatted_address」],它會拋出一個錯誤 –

回答

1

只需使用for result in js1['results']:


順便更換for result in js1:,張貼在問題的評論,沒有必要用一個計數器。你可以重寫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) 
+0

Hi @python_beginner,如果這個或任何答案已經解決了你的問題,請考慮[接受它](http://meta.stackexchange.com/q/5234/179419)通過點擊複選標記(不只是upvoting)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。 –

+0

謝謝,它工作:) –

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)