a.json 文件:{ "a": "b", "key": "graph: \"color\" = 'black' AND \"api\" = 'demo-application-v1' nodes", "c": "d"}以下代碼我試過:string_to_be_replace = "abcd"string_to = "graph: \"color\" = 'black' AND \"api\" = 'demo-application-v1' nodes"string_to_be_identified = "\"color\" = \'black\' AND \"api\" = \'demo-application-v1\'"string_to_be_identified1 = '"color" = \'black\' AND "api" = \'demo-application-v1\''print string_to_be_identifiedprint string_to_be_identified1print string_to.replace(string_to_be_identified1,string_to_be_replace)print string.replace(string_to, string_to_be_identified,string_to_be_replace)輸出:"color" = 'black' AND "api" = 'demo-application-v1'"color" = 'black' AND "api" = 'demo-application-v1'graph: abcd nodesgraph: abcd nodes這工作正常并按預期替換字符串但是當我嘗試以下方法時不是方法一:以讀取模式打開文件,逐行獲取并替換字符串with open(path + '/a.json', 'r') as file: read_lines = file.readlines() for line in read_lines: print line.replace(string_to_be_identified,string_to_be_replace)file.close()輸出:{ "a": "b", "key": "graph: \"color\" = 'black' AND \"api\" ='demo-application-v1' node", "c": "d"}方法二:以閱讀模式打開文件,由于文件 a.json 有 JSON 數據,加載 JSON 文件,將 JSON 對象轉換為 JSON-string,然后替換它。代碼: with open(path + '/a.json', 'r') as file: loadedJson = json.load(file) print "z: " + str(loadedJson).replace(string_to_be_identified, string_to_be_replace)file.close()輸出:z: {u'a': u'b', u'c': u'd', u'key': u'graph: "color" = 'black' AND "api" = 'demo-application-v1 '節點'}方法三:我假設 JSON 字符串中的 Unicode 字符可能會產生問題,因此將 Unicode 字符串轉換為普通字符串,然后嘗試替換字符串輸出:a: {'a': 'b', 'c': 'd', 'key': 'graph: "color" = 'black' AND "api" = 'demo-application-v1' node'}蟒蛇版本:2.7.15使用來自 SO 答案之一的 byteify 代碼。JSON 文件很大,無法進行手動搜索和替換。在上面的例子中仍然嘗試過的python中的 ' 和 " 沒有區別。
1 回答

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
雖然我當然不建議在 JSON 等層次結構中進行任何類型的上下文無關搜索和替換,但您的主要問題是您在 JSON 文件中搜索的字符串已轉義引號(文字\字符),因此您必須考慮如果您想進行純文本搜索,也適用于那些。您可以使用原始字符串或自己添加反斜杠,例如:
str_search = r"graph: \"color\" = 'black' AND \"api\" = 'demo-application-v1'"
# or, if you prefer to manually write down the string instead of declaring it 'raw':
# str_search = "graph: \\\"color\\\" = 'black' AND \\\"api\\\" = 'demo-application-v1'"
str_replace = "abcd"
with open("/path/to/your.json", "r") as f:
for line in f:
print(line.replace(str_search, str_replace))
其中,對于您的 JSON,將產生:
{
"a": "b",
"key": "abcd 節點",
“c”:“d”
}
(由 增加了額外的新行print)。
添加回答
舉報
0/150
提交
取消