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

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


response = urllib.request.urlopen(request)

该response对象是一个类似文件的对象read和readline方法。通常,可以使用以文本模式打开的文件创建JSON对象。


obj = json.load(fp)

我想做的是:


obj = json.load(response)

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


当然,解决方法是:


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

obj = json.loads(str_response)

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


有没有更好的方法可以将字节文件对象转换为字符串文件对象?或者我错过任何参数urlopen或json.load给出编码?


万千封印
浏览 446回答 3
3回答

料青山看我应如是

HTTP发送字节。如果有问题的资源是文本,则通常通过Content-Type HTTP标头或其他机制(RFC,HTML meta http-equiv,...)指定字符编码。urllib 应该知道如何将字节编码为字符串,但它太天真 - 它是一个可怕的动力不足和非Pythonic库。Dive Into Python 3提供了有关情况的概述。你的“解决方案”很好 - 虽然感觉不对,但这是正确的做法。

牧羊人nacy

Python拯救的精彩标准库......import codecsreader = codecs.getreader("utf-8")obj = json.load(reader(response))适用于py2和py3。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python