[英]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.