Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:JSON对象必须是str,而不是';字节';_Python_Json - Fatal编程技术网

Python TypeError: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设置为数据变量,

我有以下,非常基本的代码抛出<代码>类型错误: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设置为数据变量,如下所示,但它抛出相同的错误
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()注意