如何用python更新json文件

新手上路,请多包涵

我正在尝试更新现有的 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": ""
}

原文由 Igal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 429
1 个回答

这里的问题是您打开了一个文件并读取了它的内容,所以光标位于文件的末尾。通过写入相同的文件句柄,您实际上是在追加文件。

最简单的解决方案是在读入文件后关闭文件,然后重新打开它进行写入。

 with open("replayScript.json", "r") as jsonFile:
    data = json.load(jsonFile)

data["location"] = "NewPath"

with open("replayScript.json", "w") as jsonFile:
    json.dump(data, jsonFile)

或者,您可以使用 seek() 将光标移回文件的开头然后开始写入,然后是 truncate() 来处理新数据小于文件的情况以前的。

 with open("replayScript.json", "r+") as jsonFile:
    data = json.load(jsonFile)

    data["location"] = "NewPath"

    jsonFile.seek(0)  # rewind
    json.dump(data, jsonFile)
    jsonFile.truncate()

原文由 Shawn Chin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏