Python TypeError:JSON对象必须是str,而不是';字节';
我有以下,非常基本的代码抛出<代码>类型错误:JSON对象必须是str,而不是“字节”Python TypeError:JSON对象必须是str,而不是';字节';,python,json,Python,Json,我有以下,非常基本的代码抛出类型错误:JSON对象必须是str,而不是“字节” 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设置为数据变量,
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.load(myResponse.content).decode('utf-8')
有什么建议吗 让请求为您解码:
data = response.json()
这将检查标题(内容类型)和响应编码,自动检测如何正确解码内容
json.loads(myResponse.content.decode('utf-8'))
你只是把它放错了顺序,无辜的错误
(深度回答)。正如wim礼貌地指出的,在一些罕见的情况下,他们可以选择UTF-16或UTF-32。在这种情况下,开发人员会有意识地决定扔掉宝贵的带宽,这样的情况就不那么常见了。因此,如果遇到编码问题,可以将utf-8更改为16、32等 有几种解决方案。您可以使用请求的内置
.json()
函数:
myResponse.json()
或者,您可以通过chardet
选择字符检测。Chardet是一个基于研究开发的图书馆。该库有一个功能:检测
。Detect可以检测最常见的编码,然后使用它们对字符串进行编码
import chardet
json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))
python3.6+会自动执行此操作。因此,您的代码不应在python3.6中返回错误+
我正在尝试您的方法,但遇到错误:“InMemoryUploadedFile”对象没有属性“json”,这是来自request.FILES['file'].json()注意