TypeError:JSON对象必须是str,而不是'bytes'

2024-05-14 02:39:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下抛出的非常基本的代码:TypeError:JSON对象必须是str,而不是'bytes'

import requests
import json

url = 'my url'
user = 'my user'
pwd = 'my password'

response = requests.get(url, auth=(user, pwd))

if(myResponse.ok):
    Data = json.loads(myResponse.content)

我试图将decode设置为数据变量,如下所示,但它抛出了相同的错误;jData = json.loads(myResponse.content).decode('utf-8')

有什么建议吗?


Tags: 对象代码importjsonurlmypwdcontent
3条回答
json.loads(myResponse.content.decode('utf-8'))

你只是把它放错了顺序,无辜的错误。


(深入回答)。正如wim礼貌地指出的,在一些罕见的情况下,他们可以选择UTF-16或UTF-32。这些情况对于开发人员来说并不常见,因为在这种情况下,他们会有意识地决定丢弃有价值的带宽。因此,如果遇到编码问题,可以将utf-8更改为16、32等

有两种解决方案。您可以使用请求的内置.json()函数:

myResponse.json()

或者,您可以选择通过chardet进行字符检测。Chardet是一个基于研究开发的图书馆。库有一个函数:detect。Detect可以检测最常见的编码,然后使用它们对字符串进行编码。

import chardet
json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))

让请求为您解码:

data = response.json()

这将检查头(内容类型)和响应编码,自动检测如何正确解码内容。

python3.6+会自动执行此操作。因此代码不应在python3.6+中返回错误

what's new in python3.6

相关问题 更多 >