我正在从外部json文件将一些数据加载到Python中,这在大多数情况下都能正常工作。然而,偶尔有些数据包含转义字符,我需要保留这些字符。
{
"version": 1,
"query": "occasionally I \"need\" to escape \"double\" quotes"
}
import json
with open('input_file', 'r') as f:
file = json.load(f)
'{}'.format(file['query'])
actual_query = '"datadog.agent.up".over("role:dns").by("host").last(1).count_by_status()'
json.dumps(actual_query)
'"\\"datadog.agent.up\\".over(\\"role:dns\\").by(\\"host\\").last(1).count_by_status()"'
答案 0 :(得分:2)
这正是你应该期待的,我不确定为什么它不是你想要的。请记住,print
命令返回变量的表示形式,例如print('\"')
给出"
。
使用您的示例,您可以看到在输出结果时如何获取转义字符:
import json
a = r"""{
"version": 1,
"query": "occasionally I \"need\" to escape \"double\" quotes"
}"""
j = json.loads(a)
print j
print json.dumps(j)
给了我:
{u'query': u'occasionally I "need" to escape "double" quotes', u'version': 1}
{"query": "occasionally I \"need\" to escape \"double\" quotes", "version": 1}
(如果你原谅python2)
回复你的编辑:
'{}'.format(file['query']) == file['query']
返回True
- 您将字符串对象格式化为字符串。正如我所建议的,使用
json.dumps(file['query'])
返回
"occasionally I \"need\" to escape \"double\" quotes"
顺便说一句就是字符串:
'"occasionally I \\"need\\" to escape \\"double\\" quotes"'
您的“实际查询”也是如此:
query = '"\\"datadog.agent.up\\".over(\\"role:dns\\").by(\\"host\\").last(1).count_by_status()"'
给出
print json.dumps(query)
# "\"datadog.agent.up\".over(\"role:dns\").by(\"host\").last(1).count_by_status()"
with open('myfile.txt', 'w') as f:
f.write(json.dumps(query))
# file contents:
# "\"datadog.agent.up\".over(\"role:dns\").by(\"host\").last(1).count_by_status()"
加倍\\
:
请注意,这就是为什么你需要明确你实际上要做的事情。
加倍\
的技巧就是放入repr()
例如:
print repr(json.dumps(query))[1:-1] # to remove the ' from the beginning and end
# "\\"datadog.agent.up\\".over(\\"role:dns\\").by(\\"host\\").last(1).count_by_status()"
with open('myfile.txt', 'w') as f:
f.write(repr(json.dumps(actual_query))[1:-1])
# file:
# "\\"datadog.agent.up\\".over(\\"role:dns\\").by(\\"host\\").last(1).count_by_status()"
你也可以在它上面.replace(r'\', r'\\')
答案 1 :(得分:0)
当我运行你的程序时,我得到的json看起来有点不同。 输出中的第二行周围有单引号。我不明白。
反正。虽然单引号解决了转义问题,但Json无效。有效的Json需要双引号。单引号只是Python中的字符串分隔符。
用代码替换代码中的最后一行
print(json.dumps(file))
返回适当的json。
{
"query": "occasionally I \"need\" to escape \"double\" quotes",
"version": 1
}
问候,
Melle的