【发布时间】:2014-06-05 19:59:29
【问题描述】:
我一直在尝试更新一个名为 libpynexmo 的小型 Python 库以使用 Python 3。
我一直卡在这个功能上:
def send_request_json(self, request):
url = request
req = urllib.request.Request(url=url)
req.add_header('Accept', 'application/json')
try:
return json.load(urllib.request.urlopen(req))
except ValueError:
return False
当它到达这里时,json 会响应:
TypeError: the JSON object must be str, not 'bytes'
我在一些地方读到,对于 json.load,您应该传递带有 .read() 的对象(在本例中为 HTTPResponse 对象),但它不适用于 HTTPResponse 对象。
我不知道下一步该去哪里,但由于我的整个 1500 行脚本都刚刚转换为 Python 3,我不想回到 2.7。
【问题讨论】:
-
你试过通过2to3吗?
-
@zmo - 手动完成,以便了解更多信息。
-
@dano - 之前找到了该链接,但无法使他的解决方法适用于我的情况。我无法在我的 HTTPResponse 对象上使用 .readall()。
-
@Chevron,如果您尝试转换 json 请求对象,请使用:json.loads(request.body.decode('utf-8'))
标签: json python-3.x python-3.4 nexmo