Điều này đã được giải quyết.
Khi tôi in response.read()
Tôi nhận thấy rằng b
được đặt trước được chuyển thành chuỗi (ví dụ: b'{"a":1,..
). Chữ "b" là viết tắt của byte và đóng vai trò như một khai báo cho kiểu đối tượng bạn đang xử lý. Kể từ khi, tôi biết rằng một chuỗi có thể được chuyển đổi thành một dict bằng cách sử dụng json.loads('string')
, tôi chỉ cần chuyển đổi loại byte thành một loại chuỗi. Tôi đã làm điều này bằng cách giải mã phản hồi cho utf-8 decode('utf-8')
. Một khi nó đã được trong một loại chuỗi vấn đề của tôi đã được giải quyết và tôi đã dễ dàng có thể lặp qua các dict
.
Tôi không biết nếu điều này là hầu hết các cách 'pythonic' viết này nhanh nhất hay nhưng nó hoạt động và theres luôn thời gian sau đó tối ưu hóa và nâng cao! Mã đầy đủ cho giải pháp của tôi:
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
Nếu có ai tìm thấy điều này thông qua Google, tôi hy vọng điều này sẽ hữu ích. Lời khuyên tốt nhất tôi có thể đưa ra là, đọc kỹ các lỗi của bạn và chú ý đến đầu ra bạn nhận được.
Nguồn
2014-04-15 01:32:47
không có thuộc tính 'json'. Đừng nhầm lẫn giữa thư viện 'requests' và' urllib.request'. – jfs