繁体   English   中英

Python JSON解码器错误,请求内容中包含unicode字符

[英]Python JSON decoder error with unicode characters in request content

使用请求库执行返回JSON响应的http GET当响应字符串包含unicode char时,我收到此错误:

json.decoder.JSONDecodeError: Invalid control character at: line 1 column 20 (char 19)

与Postman执行相同的http请求json输出是:

{ "value": "VILLE D\u0019ANAUNIA" }

我的python代码是:

data = requests.get(uri, headers=HEADERS).text
json_data = json.loads(data)

在使用json.loads(...)执行转换之前,我可以删除或替换所有Unicode字符吗?

这可能是由正确的单一报价标记U + 2019( ' )引起的。 由于我无法猜测的原因,高位字节已经被删除,留下一个控制字符,应该在正确的JSON字符串中进行转义。

因此,正确的方法是控制API返回的确切内容。 如果id确实返回'\'控制字符,您应该联系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 DANAUNIA'}

或者,您可以用空格替换所有不需要的字符:

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)

你会得到{'value': 'VILLE D ANAUNIA'}

下面的代码适用于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'}

另一点是请求以json的形式返回数据:

r = requests.get('https://api.github.com/events')
r.json()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM