【发布时间】:2019-05-30 10:26:27
【问题描述】:
TL,DR; 如何使用 Python's JSON decoder 加载包含带有转义反斜杠的正则表达式的 JSON?
Detail;正则表达式\\[0-9]\\将匹配(例如):
\2\
同样的正则表达式可以编码为 JSON 值:
{
"pattern": "\\[0-9]\\"
}
反过来,JSON 值可以在 Python 中编码为字符串(注意单引号):
'{"pattern": "\\[0-9]\\"}'
在 Python 中加载 JSON 时,会引发 JSONDecodeError:
import json
json.loads('{"pattern": "\\[0-9]\\"}')
问题是由正则表达式转义黑斜线引起的:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid \escape: line 1 column 14 (char 13)
>>> json.loads('{"pattern": "\\[0-9]\\"}')
这让我感到惊讶,因为每一步似乎都很合理(即有效的正则表达式、有效的 JSON 和有效的 Python)。
如何使用 Python's JSON decoder 加载包含带有转义反斜杠的正则表达式的 JSON?
【问题讨论】:
-
json.loads(r'{"pattern": "\\[0-9]\\"}') -
你的 实际 JSON 是什么?你的字符串文字不正确,但无论你加载什么都应该是。
-
什么是正则表达式错误?