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

json.decoder.JSONDecodeError:额外数据:第 1 行第 5 列

json.decoder.JSONDecodeError:额外数据:第 1 行第 5 列

qq_花开花谢_0 2023-08-08 17:46:27
我使用 requests 成功从 api 中提取数据,结果是 requests.model.response。我发现当我将其转换为 json 字典时,出现以下错误(与标题相同):json.decoder.JSONDecodeError:额外数据:第1行第5列(字符4)/引发JSONDecodeError(“额外数据”,s,end)为了解决这个问题,我尝试将 model.response 转换为字符串,然后返回到具有以下内容的字典:responset = response.text responseld = json.loads(json.dumps(responset))我是根据网上做的一些研究来做到这一点的。不,这对我来说完全没有意义,因为这似乎只是类型的转换,然后又返回到相同的类型。但我认为转储所做的不仅仅是类型转换,因为我在另一个线程中看到这种方法(我在这里展示的)已被用来解决其他人的类似错误。你有什么建议吗?如果您需要更多信息,请告诉我。谢谢。
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

有多种方法可以从通过requests库获得的响应中解码 json。

我希望您得到response与此类似的代码:

response = requests.get(url)

首先,最底层,但可靠且易于调试,它使用的response.content是响应的原始正文字节:

result = json.loads(response.content.decode('utf-8'))

第二个用途response.text基本上是response.content使用库的最佳匹配编码自动转换为文本字符串requests

result = json.loads(response.text)

最高级和最简单的,requests需要全力以赴地完成正确的转换工作:

result = response.json()

其中一种方法应该有效。

另外,在收到响应后,您始终需要检查状态代码,因为requests不会在非 200 状态代码上引发异常,因此您需要在解码之前执行assert response.status_code == 200或。response.raise_for_status()状态代码不等于 200 始终意味着服务器响应错误并且响应不包含 json。


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

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