我试图更新现有的 Json 文件,但是由于某种原因,所请求的值未被更改,而是将整个新值集合(包括新值)追加到原始文件中。
jsonFile = open("replayScript.json", "r+")
data = json.load(jsonFile)
tmp = data["location"]
data["location"] = "NewPath"
jsonFile.write(json.dumps(data))
结果是:
需要:
{
"location": "NewPath",
"Id": "0",
"resultDir": "",
"resultFile": "",
"mode": "replay",
"className": "",
"method": "METHOD"
}
实际:
{
"location": "/home/karim/storm/project/storm/devqa/default.xml",
"Id": "0",
"resultDir": "",
"resultFile": "",
"mode": "replay",
"className": "",
"method": "METHOD"
}
{
"resultDir": "",
"location": "pathaaaaaaaaaaaaaaaaaaaaaaaaa",
"method": "METHOD",
"className": "",
"mode": "replay",
"Id": "0",
"resultFile": ""
}
seek()
和truncate()
的用法。然而,我认为将jsonFile.write(json.dumps(data))
更改为jsonFile.dump(data, f)
会更加符合 Python 的风格。 - BoltzmannBraindata["location_2"] = "NewPath_2"
,那么我是否应该将jsonFile.seek(0); dump(); truncate()
应用于该行,还是只需要在所有更新的末尾进行一次jsonFile.seek(0) ; json.dump(data, jsonFile); jsonFile.truncate()
? - alperjson.dump(data, jsonFile); jsonFile.truncate()
只更新文件中的更新部分还是重新写入整个文件?@Shawn Chin - alpertmp = data["location"]
看起来是多余的,应该被删除。此外,我使用了json.dump(data, jsonFile, indent=4)
来触发漂亮打印,这样 JSON 文件的布局就不会是紧凑型。 - Sun Bear