[英]ValueError: Invalid \escape unable to load json from file
[英]Unable to load json containing escape sequences
我通过了一些Json,无法解析它。
该对象当前很简单,只有一个键/值对。 密钥可以正常工作,但是\\d
值会引起问题。
这来自html表单,通过javascript。 以下所有都是文字。
\\d
{'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.