我了解在处理特殊转义字符时,存在很多类似的json解析问题,但是我找不到解决方案。我想做的是将以下内容保存到json文件中,以后可以使用python中的json模块将其作为字典检索。我的json就是这样
{"head":{"body":{"/^\s+|\s+$":"", "\s+":" "}}}
当我尝试将其放入json并加载时,由于反斜杠未转义,这给了我预期的解析错误。因此,我(根据SO的建议)对其进行了如下纠正:
{"head":{"body":{"/^\\s+|\\s+$":"", "\\s+":" "}}}
但是,当我将其加载到dict时,尽管它解析了,但它给了我dict如下:
{"head":{"body":{"/^\\s+|\\s+$":"", "\\s+":" "}}}
,而不是预期的单个反斜杠。如何处理它,这样我的\ s就只有一个反斜杠而没有两个。我也想与ast.literal_eval()一起读取数据,但不想那样做。有关如何执行此操作的任何建议。
答案 0 :(得分:1)
您有一个带有一些正则表达式的数据结构。用Python语法是:
data = {
'head': {
'body': {
r'^\s+|\s+$': '',
r'\s+': ' '
}
}
}
当您将此数据转换为JSON并将其存储在文件中时:
import json
with open('test.json', 'w', encoding='utf8') as fp:
json.dump(data, fp)
并在文本编辑器中打开生成的文件,您将看到:
{"head": {"body": {"^\\s+|\\s+$": "", "\\s+": " "}}}
当您再次JSON解析此文件时:
with open('test.json', encoding='utf8') as fp:
data = json.read(fp)
print(data)
Python将打印以下内容:
{'head': {'body': {'^\\s+|\\s+$': '', '\\s+': ' '}}}
...这与我们一开始就完全一样,只是最初使用的是raw string literals r'...'
,但是Python的print()
永远不会输出这种特定格式。
您最初想要在JSON文件中使用的东西:
{"head":{"body":{"/^\s+|\s+$":"", "\s+":" "}}}
不是JSON,因此没有任何理由尝试实现这种格式。
结论