在Python
回答
此問題已解決。
當我打印response.read()
我注意到b
被預先寫入字符串(例如b'{"a":1,..
)。 「b」代表字節,用作所處理對象類型的聲明。既然,我知道一個字符串可以通過使用json.loads('string')
轉換爲字典,我只需要將字節類型轉換爲字符串類型。我通過解碼對utf-8 decode('utf-8')
的響應來做到這一點。一旦它在字符串類型中,我的問題就解決了,我很容易就可以遍歷dict
。
我不知道這是否是最快或最「pythonic」的寫作方式,但它的工作原理和總是時間後優化和改進!我的解決方案的完整代碼:
from urllib.request import urlopen
import json
# Get the dataset
url = 'http://www.quandl.com/api/v1/datasets/FRED/GDP.json'
response = urlopen(url)
# Convert bytes to string type and string type to dict
string = response.read().decode('utf-8')
json_obj = json.loads(string)
print(json_obj['source_name']) # prints the string with 'source_name' key
如果有人想通過谷歌找到這個,我希望這有助於。我可以給出最好的建議,仔細閱讀你的錯誤,並密切關注你接受的輸出。
我猜python 3.4中的東西已經改變了。這爲我工作:
print("resp:" + json.dumps(resp.json()))
json
作品與Unicode文本在Python 3(JSON格式本身的定義只在Unicode文本而言),因此,你需要解碼的HTTP響應接收的字節。 r.headers.get_content_charset('utf-8')
得到您的字符編碼:
#!/usr/bin/env python3
import io
import json
from urllib.request import urlopen
with urlopen('https://httpbin.org/get') as r, \
io.TextIOWrapper(r, encoding=r.headers.get_content_charset('utf-8')) as file:
result = json.load(file)
print(result['headers']['User-Agent'])
這是沒有必要在這裏使用io.TextIOWrapper
:
#!/usr/bin/env python3
import json
from urllib.request import urlopen
with urlopen('https://httpbin.org/get') as r:
result = json.loads(r.read().decode(r.headers.get_content_charset('utf-8')))
print(result['headers']['User-Agent'])
在Python 3中,使用'r.msg.get_content_charset'。 https://docs.python.org/3/library/http.client.html#http.client.HTTPResponse.msg –
@ PeppeL-G:來自'HTTPResponse'源文件:*「'headers'在這裏使用並支持'urllib''msg'提供作爲HTTP客戶端向後兼容層。「* – jfs
哦,對不起,我沒有Python中的很多經驗,但你可能是正確的。我用'HTTPResponse'類工作從'http.client'模塊,我現在看到有一些差異(這個類既包含了'msg'場和'headers'場(值相同),但只有我發現了'msg'字段的文檔,所以我認爲'headers'是爲了向後兼容而保留的。我的錯誤 –
您也可以使用Python的請求庫,而不是。
import requests
url = 'http://www.quandl.com/api/v1/datasets/FRED/GDP.json'
response = requests.get(url)
dict = response.json()
現在你可以像Python字典一樣操縱「字典」了。
- 1. 的Python:在Python
- 2. 的Python:在Python
- 3. 在python sum()python
- 4. Python代碼在python
- 5. 在python
- 6. 在Python
- 7. 在Python
- 8. 在python
- 9. 在python
- 10. 在python
- 11. 在Python
- 12. 在python
- 13. 在Python
- 14. 在python
- 15. 在python
- 16. 在python
- 17. 在python
- 18. 在python
- 19. 在python
- 20. 在Python
- 21. 在Python
- 22. 在Python
- 23. 在Python
- 24. 在python
- 25. 在python
- 26. 在python
- 27. 在python
- 28. 在Python
- 29. 在python
- 30. 在Python
沒有'json'屬性。不要混淆'request'庫和'urllib.request'。 – jfs