首页 > 解决方案 > JSON 添加不必要的花括号

问题描述

我正在使用 Discord.py 创建一个 Discord 机器人。我创建了一个命令,该命令将使用用户指定的值更新外部 JSON 文件。在测试命令时,我注意到某些单词,例如tes,会在 JSON 文件的末尾添加一个不必要的大括号。这个问题只出现在某些单词上,大多数工作没有任何问题。

Python 文件

import json
with open("./file.json", "r+") as file:
    f = json.load(file)
    file.truncate()
    f["key"] = "tes"
    file.seek(0)
    json.dump(f, file, indent = 4)

JSON文件

{
"key": "tes"
}
}

我试过使用f.update({"key": "tes"}),但没有区别。

编辑:问题已通过file.truncate()以下移动解决file.seek(0)

标签: pythonjsonpython-3.x

解决方案


当您file.truncate()不带参数调用时,它会在当前位置(文件末尾)截断文件。然后,当您调用 时file.seek(0),它会移动到文件的开头并开始在旧数据之上写入新数据。如果新内容比旧内容短(例如,将“test”字符串替换为“tes”),一些旧内容将在最后留下。这里有几个解决方案:

  • 将电流更改file.truncate()file.truncate(0)
  • file.seek(0)在写入文件之前使用,然后立即使用或file.truncate()在您完成将数据写入文件之后使用
  • 使用open(filename, 'r')块读取文件,然后使用单独的open(filename, 'w')块写回文件(自动替换全部内容)

推荐阅读