小编典典

让 JSON 对象接受字节或让 urlopen 输出字符串

all

使用 Python 3,我从 URL 请求一个 json 文档。

response = urllib.request.urlopen(request)

response对象是具有readreadline方法的类文件对象。通常,可以使用以文本模式打开的文件来创建 JSON 对象。

obj = json.load(fp)

我想做的是:

obj = json.load(response)

但是,这不起作用,因为 urlopen 以二进制模式返回文件对象。

解决方法当然是:

str_response = response.read().decode('utf-8')
obj = json.loads(str_response)

但这感觉很糟糕......

有没有更好的方法可以将字节文件对象转换为字符串文件对象?或者我是否缺少任何参数urlopenjson.load提供编码?


阅读 60

收藏
2022-08-03

共1个答案

小编典典

HTTP 发送字节。如果所讨论的资源是文本,则通常通过 Content-Type HTTP 标头或其他机制(RFC、HTMLmeta http- equiv等)指定字符编码。

urllib 应该 知道如何将字节编码为字符串,但它太幼稚了——它是一个功能严重不足且非 Pythonic 的库。

Dive Into Python 3提供了有关情况的概述。

你的“变通办法”很好——虽然感觉不对,但这是正确的做法。

2022-08-03