属性错误:“字节”对象没有属性“ __dict__”

时间:2019-07-26 15:40:55

标签: python json python-requests

我正在尝试将从api接收的数据保存为json格式的文件。

response = requests.get(url_league,   headers= header)
type(response)
#output requests.models.Response
with open("json.txt", "w+") as f:
    data = json.dump(response, f)

当我尝试将响应对象保存到文件时,出现以下错误

Object of type Response is not JSON serializable

我读到json模块在编码复杂对象方面存在问题,为此json中的默认功能是对复杂对象进行编码。我尝试了以下代码

json_data = json.dump(response.__dict__, f, default = lambda o: o.__dict__, indent=4)

并出现以下错误

bytes' object has no attribute '__dict__'

此错误是什么意思以及如何解决?

1 个答案:

答案 0 :(得分:0)

您收到的错误意味着响应的类型为“字节”,而不是text / JSON。您需要先解码响应(需要urllib或urllib2)。

import json
import urllib.request

response=urllib.request.urlopen(url_league).read()
string = response.decode('utf-8')
json_obj = json.loads(string)

with open("json.txt", "w+") as f:
    data = json.dump(json_obj, f)

要使用标题,您只需使用

req = Request(url)
req.add_header('apikey', 'xxx')