我有一个JSON文件,其中包含一些要在我的python代码中使用的正则表达式。 当我尝试在JSON文件中转义保留的正则表达式字符时,就会出现问题。 当我运行python代码时,它无法处理json文件并引发异常。
我已经调试了代码,并得出结论,调用json.loads(ruleFile.read())
时该代码将失败。显然,只有某些字符可以在JSON中转义,而点不是其中的一个会导致语法错误。
try:
with open(args.rules, "r") as ruleFile:
rules = json.loads(ruleFile.read())
for rule in rules:
rules[rule] = re.compile(rules[rule])
except (IOError, ValueError) as e:
raise Exception("Error reading rules file")
{
"Rule 1": "www\.[a-z]{3,10}\.com"
}
Traceback (most recent call last):
File "foo.py", line 375, in <module>
main()
File "foo.py", line 67, in main
raise Exception("Error reading rules file")
Exception: Error reading rules file
如何解决此JSON语法问题?
答案 0 :(得分:0)
反斜杠需要在JSON中转义。
{
"Rule 1": "www\\.[a-z]{3,10}\\.com"
}
来自here:
以下字符在JSON中保留,并且必须正确 转义用于字符串:
- 退格替换为 \ b
- 换页替换为 \ f
- 换行符被替换为 \ n
- 回车替换为 \ r
- 标签被替换为 \ t
- 双引号被替换为 \“
- 反斜杠被替换为 \\
答案 1 :(得分:0)
规则是首先在正确的字典中包含正确的字符串。并且\
将在Python中转义。
所以您首先应该写:
rules = {"Rule 1": r"www\.[a-z]{3,10}\.com"}
然后您可以轻松地将其转换为JSON字符串:
print(json.dumps(rules, indent=4))
{
"Rule 1": "www\\.[a-z]{3,10}\\.com"
}
您现在知道应该如何格式化包含正则表达式的json文件。