這正是你應該期待什麼,我不知道爲什麼它不你想要什麼。請記住,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 )
在repsonse您的編輯:
'{}'.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'\\')
它
輸入文件似乎給正確的結果,我在Python 3.6,您使用的是什麼版本? –
@AnandSKumar 3.5.2所以,當你加載它保留逃生字符? –
你想做什麼?如果你想讓json格式化轉義回去,你可以使用'json.dumps(file)' – Stael