python - 无法加载包含转义序列的 json

标签 python json python-3.x

我正在传递一些 Json,但在解析它时遇到问题。

该对象目前很简单,只有一个键/值对。 key 工作正常,但值 \d导致问题。

这是通过 javascript 来自 html 表单。以下所有内容均为文字。

  • HTML:\d
  • Javascript:{'Key': '\d'}
  • Json:{"Key": "\\d"}

json.loads()似乎不喜欢Json这种格式。快速理智检查我没有做任何愚蠢的事情,效果很好:

>>> import json
>>> json.loads('{"key":"value"}')
{'key': 'value'}

由于我在 Python 中声明此字符串,因此它应该将其转义为文字 va\\lue - 当解析为 Json 时应该是 va\lue .

>>> json.loads('{"key":"va\\\\lue"}')
{'key': 'va\\lue'}

如果 python 没有在传入的过程中转义字符串,我想我应该检查而不加倍...

>>> json.loads('{"key":"va\\lue"}')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python33\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "C:\Python33\lib\json\decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python33\lib\json\decoder.py", line 368, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid \escape: line 1 column 11 (char 10)

但正如预期的那样,它失败了。

在所有转义发生之后,我看不到任何方法来解析应包含单个反斜杠的 Json 字段。

如何让 Python 反序列化此字符串文字 {"a":"val\\ue"} (即 valid Json )转换为适当的 python 表示形式: {'a': 'val\ue'}

顺便说一句,PyDev 与其使用的字符串表示形式不一致并没有帮助。监 window 口显示双反斜杠,变量的工具提示显示四反斜杠。我认为这就是“如果您要输入字符串,则必须使用它才能转义为原始”表示形式,但这绝不是明确的。

编辑以跟进 @twalberg 的答案...

>>> input={'a':'val\ue'}
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec cant decode bytes in position 3-5: truncated \uXXXX escape
>>> input={'a':'val\\ue'}
>>> input
{'a': 'val\\ue'}
>>> json.dumps(input)
'{"a": "val\\\\ue"}'
>>> json.loads(json.dumps(input))
{'a': 'val\\ue'}
>>> json.loads(json.dumps(input))['a']
'val\\ue'

最佳答案

使用 json.dumps() 查看 json 如何表示您的目标字符串:

>>> orig = { 'a' : 'val\ue' }
>>> jstring = json.dumps(orig)
>>> print jstring
{"a": "val\\ue"}
>>> extracted = json.loads(jstring)
>>> print extracted
{u'a': u'val\\ue'}
>>> print extracted['a']
val\ue
>>> 

不过,这是在 Python 2.7.3 中,因此它可能仅与您的 Python 3.x 环境部分相关。尽管如此,我认为 JSON 并没有改变那么多......

关于python - 无法加载包含转义序列的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239572/

相关文章:

Python套接字不传送数据包

python - 访问包含列表的 Pandas DataFrame 列的每个第一个元素

json - std.json - 与 TRUE、FALSE 和 NULL 值有点混淆

python3 http.server 响应无效(Postman 和其他工具)

mysql - 使用 Python 3.6 mysql-connector-python 启动事务不返回任何结果

javascript - 在 PHP 中打印嵌套 Json

python - MathJax SVG 未验证

python更改UDPServer中的最大限制接收缓冲区

python - 用PIL制作缩略图,增强方式

javascript - Paypal 快速结账 : Successful transaction but cannot show the order detail in seller account