使用 Python 3,我从 URL 请求一个 json 文档。
response = urllib.request.urlopen(request)
该response对象是具有read和readline方法的类文件对象。通常,可以使用以文本模式打开的文件来创建 JSON 对象。
response
read
readline
obj = json.load(fp)
我想做的是:
obj = json.load(response)
但是,这不起作用,因为 urlopen 以二进制模式返回文件对象。
解决方法当然是:
str_response = response.read().decode('utf-8') obj = json.loads(str_response)
但这感觉很糟糕......
有没有更好的方法可以将字节文件对象转换为字符串文件对象?或者我是否缺少任何参数urlopen或json.load提供编码?
urlopen
json.load
HTTP 发送字节。如果所讨论的资源是文本,则通常通过 Content-Type HTTP 标头或其他机制(RFC、HTMLmeta http- equiv等)指定字符编码。
meta http- equiv
urllib 应该 知道如何将字节编码为字符串,但它太幼稚了——它是一个功能严重不足且非 Pythonic 的库。
urllib
Dive Into Python 3提供了有关情况的概述。
你的“变通办法”很好——虽然感觉不对,但这是正确的做法。