簡體   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