为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2019-09-20 16:16:55
使用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给出编码?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

HTTP发送字节。如果有问题的资源是文本,则通常通过Content-Type HTTP标头或其他机制(RFC,HTML meta http-equiv,...)指定字符编码。


urllib 应该知道如何将字节编码为字符串,但它太天真 - 它是一个可怕的动力不足和非Pythonic库。


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


你的“解决方案”很好 - 虽然感觉不对,但这是正确的做法。


查看完整回答
反对 回复 2019-09-20
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

Python拯救的精彩标准库......


import codecs


reader = codecs.getreader("utf-8")

obj = json.load(reader(response))

适用于py2和py3。



查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 445 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信