请求内容中包含unicode字符的Python JSON解码器错误
使用请求库执行返回JSON响应的http GET,当响应字符串包含unicode字符时,我会遇到以下错误:请求内容中包含unicode字符的Python JSON解码器错误,python,json,python-3.x,Python,Json,Python 3.x,使用请求库执行返回JSON响应的http GET,当响应字符串包含unicode字符时,我会遇到以下错误: json.decoder.JSONDecodeError: Invalid control character at: line 1 column 20 (char 19) 与邮递员执行相同的http请求。json输出为: { "value": "VILLE D\u0019ANAUNIA" } 我的python代码是: data = requests.get(uri, headers=
json.decoder.JSONDecodeError: Invalid control character at: line 1 column 20 (char 19)
与邮递员执行相同的http请求。json输出为:
{ "value": "VILLE D\u0019ANAUNIA" }
我的python代码是:
data = requests.get(uri, headers=HEADERS).text
json_data = json.loads(data)
在使用json.loads(…)执行转换之前,是否可以删除或替换所有Unicode字符?以下代码适用于python 2.7:
import json
d = json.loads('{ "value": "VILLE D\u0019ANAUNIA" }')
print(d)
以下代码适用于python 3.7:
import json
d = json.loads('{ "value": "VILLE D\u0019ANAUNIA" }', strict=False)
print(d)
输出:
{u'value': u'VILLE D\x19ANAUNIA'}
另一点是请求get以json的形式返回数据:
r = requests.get('https://api.github.com/events')
r.json()
这可能是由右单引号U+2019(
“
)引起的。由于我猜不出的原因,高阶字节被删除,留下了一个控制字符,应该以正确的JSON字符串进行转义
因此,正确的方法是控制API返回的确切内容。如果id确实返回'\u0019'
控制字符,则应联系API所有者,因为问题应该存在
作为一种解决方法,您可以尝试通过过滤掉非ascii或控制字符来限制处理问题:
data = requests.get(uri, headers=HEADERS).text
data = ''.join((i for i in data if 0x20 <= ord(i) < 127)) # filter out unwanted chars
json_data = json.loads(data)
您将获得
{'value':'VILLE D ANAUNIA'}
查看此选项是否有助于或可能复制原始响应内容(print(requests.get(uri,headers=headers.content)
)?这可能是由编码问题引起的…参数strict=False时未引发异常!谢谢汉克的建议!现在我不需要替换unicode字符,但将来可能会有用!
data = requests.get(uri, headers=HEADERS).text
data = ''.join((i if 0x20 <= ord(i) < 127 else ' ' for i in data))
json_data = json.loads(data)