2016-02-06 60 views
0

我最初得到以下錯誤,當我試圖運行如下─類HTTPResponse「對象有沒有屬性」解碼

Error:-the JSON object must be str, not 'bytes' 

import urllib.request 
import json 
search = '230 boulder lane cottonwood az' 
search = search.replace(' ','%20') 
places_api_key = 'AIzaSyDou2Q9Doq2q2RWJWncglCIt0kwZ0jcR5c' 
url = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query='+search+'&key='+places_api_key 
json_obj = urllib.request.urlopen(url) 
data = json.load(json_obj) 
for item in data ['results']: 
    print(item['formatted_address']) 
    print(item['types']) 

代碼使得像一些故障排除更改後: -

json_obj = urllib.request.urlopen(url) 
obj = json.load(json_obj) 
data = json_obj .readall().decode('utf-8') 

Error - 'HTTPResponse' object has no attribute 'decode' 

我得到上面的錯誤,我已經嘗試了多個帖子在stackoverflow似乎沒有工作。我已經上傳了整個工​​作代碼,如果任何人都可以得到它的工作,我會非常感激。我不明白的是爲什麼同樣的事情爲別人起作用,而不是我。 謝謝!

+0

請忽略此評論---------------------- - ----------------- – Uasthana

回答

5

urllib.request.urlopen返回一個HTTPResponse對象,不能直接JSON解碼(因爲它是一個字節流)

所以你不是想:

# Convert from bytes to text 
resp_text = urllib.request.urlopen(url).read().decode('UTF-8') 
# Use loads to decode from text 
json_obj = json.loads(resp_text) 

但是,如果你從你的例子打印resp_text,您會注意到它實際上是xml,所以您需要一個xml讀取器:

resp_text = urllib.request.urlopen(url).read().decode('UTF-8') 
(Pdb) print(resp_text) 
<?xml version="1.0" encoding="UTF-8"?> 
<PlaceSearchResponse> 
    <status>OK</status> 
... 
+0

我試過以下內容: 'json_obj = urllib.request.urlopen(url).read()。decode('UTF-8')' ' data = json.load(json_obj)' 現在的說法: ''str'對象沒有屬性'decode'' – Uasthana

+0

我不能用JSON格式嗎? – Uasthana

+1

我是一個白癡使用錯誤的URL,我已經修復它非常感謝@Anthony Sottile – Uasthana

相關問題