2015-09-26 20 views
5

Tôi gặp sự cố khi tạo mô-đun 'json' và 'urllib.request' làm việc cùng nhau trong một thử nghiệm tập lệnh Python đơn giản. Sử dụng Python 3.5 và đây là mã:Đang tải đối tượng JSON bằng Python sử dụng các mô-đun urllib.request và json

import json 
import urllib.request 

urlData = "http://api.openweathermap.org/data/2.5/weather?q=Boras,SE" 
webURL = urllib.request.urlopen(urlData) 
print(webURL.read()) 
JSON_object = json.loads(webURL.read()) #this is the line that doesn't work 

Khi chạy script thông qua dòng lệnh lỗi Tôi nhận được là "Lỗi Loại: đối tượng JSON phải được str, không phải là 'byte'". Tôi mới dùng Python nên có nhiều khả năng là một giải pháp rất dễ. Đánh giá cao bất kỳ trợ giúp nào ở đây.

Trả lời

11

Ngoài việc quên giải mã, bạn chỉ có thể đọc câu trả lời sau khi. Đã gọi là .read() rồi, cuộc gọi thứ hai trả về một chuỗi trống.

Gọi .read() chỉ một lần, và decode dữ liệu vào một chuỗi:

data = webURL.read() 
print(data) 
encoding = webURL.info().get_content_charset('utf-8') 
JSON_object = json.loads(data.decode(encoding)) 

Các response.info().get_content_charset() call cho bạn biết những gì characterset server nghĩ được sử dụng.

Demo:

>>> import json 
>>> import urllib.request 
>>> urlData = "http://api.openweathermap.org/data/2.5/weather?q=Boras,SE" 
>>> webURL = urllib.request.urlopen(urlData) 
>>> data = webURL.read() 
>>> encoding = webURL.info().get_content_charset('utf-8') 
>>> json.loads(data.decode(encoding)) 
{'coord': {'lat': 57.72, 'lon': 12.94}, 'visibility': 10000, 'name': 'Boras', 'main': {'pressure': 1021, 'humidity': 71, 'temp_min': 285.15, 'temp': 286.39, 'temp_max': 288.15}, 'id': 2720501, 'weather': [{'id': 802, 'description': 'scattered clouds', 'icon': '03d', 'main': 'Clouds'}], 'wind': {'speed': 5.1, 'deg': 260}, 'sys': {'type': 1, 'country': 'SE', 'sunrise': 1443243685, 'id': 5384, 'message': 0.0132, 'sunset': 1443286590}, 'dt': 1443257400, 'cod': 200, 'base': 'stations', 'clouds': {'all': 40}} 
+0

Cảm ơn bó, hoạt động tốt bây giờ! –

Các vấn đề liên quan