在Python中用字节解析JSON
我有一些外部服务发送给我下一个json:在Python中用字节解析JSON,python,json,python-3.x,Python,Json,Python 3.x,我有一些外部服务发送给我下一个json: json_str = b'{"a": "\xc3-----\xa4-----\x13"}' 当我试图解析它时,我得到下一个错误: ----> 1 json.loads(json_str) ValueError: Invalid control character at: line 1 column 20 (char 19) 我使用next命令成功地正确解析了它: In [37]: eval(json_str) Out[37]: {'a': '\
json_str = b'{"a": "\xc3-----\xa4-----\x13"}'
当我试图解析它时,我得到下一个错误:
----> 1 json.loads(json_str)
ValueError: Invalid control character at: line 1 column 20 (char 19)
我使用next命令成功地正确解析了它:
In [37]: eval(json_str)
Out[37]: {'a': '\xc3-----\xa4-----\x13'}
关于如何以另一种方式解析它,有什么想法吗?我找到了一种使用
.decode
和json.loads
函数的方法
希望这有帮助
>>> json.loads(json_str.decode("latin-1"), strict=False)
{u'a': u'\xc3-----\xa4-----\x13'}
输出仍为unicode格式
参考资料
根据定义,JSON是Unicode文本。如果您有一个字节字符串,则需要首先对其进行解码,以获得可以解析为JSON的Unicode字符串。Python对字节和字符串之间的区别非常严格,即使两者之间的映射很简单。
eval
仅“起作用”,因为字节恰好是一个有效的Python表达式,而不是一个有效的JSON表达式的编码。是的,现在我了解了如何处理它。在此之前,我没有解码就正确解析了它,这些符号让我感到困惑。请注意,错误是指由\x13
表示的单个控制字符,它不能直接用于JSON值。谢谢!看起来像是我需要的