【问题标题】:Parsing JSON with bytes in Python在 Python 中用字节解析 JSON
【发布时间】:2019-01-23 13:36:01
【问题描述】:

我有一些外部服务会向我发送下一个 json:

json_str = b'{"a": "\xc3-----\xa4-----\x13"}'

当我试图解析它时,我得到下一个错误:

----> 1 json.loads(json_str)
ValueError: Invalid control character at: line 1 column 20 (char 19)

我设法使用下一个命令正确解析它:

In [37]: eval(json_str)
Out[37]: {'a': '\xc3-----\xa4-----\x13'}

关于如何以另一种方式解析它有什么想法吗?

【问题讨论】:

  • 根据定义,JSON 是 Unicode 文本。如果您有一个字节字符串,您需要首先对其进行解码以获得可以解析为 JSON 的 Unicode 字符串。 Python 对字节和字符串的区别非常严格,即使两者之间的映射是微不足道的。
  • eval 仅“有效”,因为除了有效 JSON 表达式的编码之外,这些字节恰好是有效的 Python 表达式。
  • 是的,现在我知道如何处理它了。在此之前,我没有解码就正确解析,这些符号让我很困惑。
  • 注意错误是指\x13表示的单个控制字符,不能直接用在JSON值中。

标签: python json python-3.x


【解决方案1】:

我找到了一种使用.decodejson.loads 函数的方法。

希望这会有所帮助。

>>> json.loads(json_str.decode("latin-1"), strict=False)
{u'a': u'\xc3-----\xa4-----\x13'}

输出仍然是 unicode

参考文献

json.loads error

decode error

【讨论】:

  • 谢谢!它看起来像我需要的东西
猜你喜欢
  • 2023-02-25
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多