繁体   English   中英

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

[英]Unable to load json containing escape sequences

我通过了一些Json,无法解析它。

该对象当前很简单,只有一个键/值对。 密钥可以正常工作,但是\\d值会引起问题。

这来自html表单,通过javascript。 以下所有都是文字。

  • HTML: \\d
  • Javascript: {'Key': '\\d'}
  • 杰森: {"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\u0026quot;}有效的Json )反序列化为相应的python表示形式: {'a': 'val\\ue\u0026#39;}

顺便说一句,PyDev与它使用的字符串的表示形式不一致并没有帮助。 监视窗口显示两个反斜杠,变量的工具提示显示四个反斜杠。 我假设这是“如果要键入字符串,则必须使用它来转义为原始字符串”表示形式,但这还不是很清楚。

编辑以遵循@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的变化不大...

暂无
暂无

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

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