這是我如何轉儲文件如何在python傾倒JSON不帶引號
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()), fp)
結果是
"a,b,c"
我想:
a,b,c
感謝
這是我如何轉儲文件如何在python傾倒JSON不帶引號
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()), fp)
結果是
"a,b,c"
我想:
a,b,c
感謝
使用python的內置字符串替換函數
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()).replace('\"',''), fp)
此解決方案也刪除字符串中的雙引號。 – 2016-11-08 09:14:21
之前執行字符串替換,你可能想strip
引號:
print '"a,b,c"'.strip('"')
輸出:
a,b,c
這是更接近你想要達到的目標。即使只是刪除第一個和最後一個字符作品:'"a,b,c"'[1:-1]
。
但你有沒有看過this question?
該解決方案比建議替換所有雙引號的解決方案要好,但當(無引號)字符串的最後一個字符是(轉義)雙引號時,它仍然刪除太多,如''我的名字是\'安迪\ 「」'。你想要的只是刪除前面的雙引號和後面的雙引號。 – 2016-11-08 09:17:28
我應該補充一點,我的評論適用於答案中提出的第一個解決方案(使用'strip()')。第二種解決方案(使用切片)適用於所有情況(並且應該有自己的答案,因此可以將其投票)。仍然投票這個答案。 – 2016-11-08 09:27:57
那麼,這不是有效的JSON,所以json
模塊不會幫你寫這些數據。但是,你可以這樣做:
import json
with open('es_hosts.json', 'w') as fp:
data = ['a', 'b', 'c']
fp.write(json.dumps(','.join(data)).replace('"', ''))
那是因爲你問json
,但由於這不是JSON,這應該足夠了:
with open('es_hosts.json', 'w') as fp:
data = ['a', 'b', 'c']
fp.write(','.join(data))
要卸下鍵只,引號這如果稍後解析它可能很重要(推測可能有一些寬容的解析器,或者你可能因爲奇怪的原因直接將它輸入node
),你可以嘗試下面的正則表達式。
re.sub(r'(?<!:)"(\S*?)"', '\\1', json_string)
的一個問題是,這個正則表達式預計領域被分隔key: value
,它會失敗key:value
。你可以使它適用於後者,但稍有改動,但類似地,它不適用於可變數量的空白:
可能還有其他邊緣情況,但它將與輸出json.dumps
一起使用,但結果將會不能被json解析。一些更寬容的解析器如yaml
可能能夠讀取結果。
import re
regex = r'(?<!:)"(\S*?)"'
o = {"noquotes" : 127, "put quotes here" : "and here", "but_not" : "there"}
s = json.dumps(o)
s2 = json.dumps(o, indent=3)
strip_s = re.sub(regex,'\\1',s)
strip_s2 = re.sub(regex,'\\1',s2)
print(strip_s)
print(strip_s2)
assert(json.loads(strip_s) == json.loads(s) == json.loads(strip_s2) == json.loads(s2) == object)
將引發ValueError
但打印你想要什麼。
是什麼讓你認爲你想要的輸出是有效的JSON?爲什麼你需要它沒有報價? – 2014-09-01 20:19:39
我知道......但是我不需要在輸出 – Tampa 2014-09-02 02:52:56
@MartijnPieters的角落案件的一部分OP沒有建議不加引號的字符串將被直接用作JSON。最近我遇到了類似的情況,在這個過程中後面添加了雙引號,所以我需要不帶引號的JSON轉義字符串。 – 2016-11-08 09:21:54