Python JSON添加不必要的花括号

Python JSON添加不必要的花括号,python,json,python-3.x,Python,Json,Python 3.x,我正在使用Discord.py创建一个Discord bot。我创建了一个命令,该命令将使用用户指定的值更新外部JSON文件。在测试该命令时,我注意到某些单词,例如tes,会在JSON文件末尾添加不必要的大括号。这个问题只出现在某些单词上,大多数单词都没有任何问题 Python文件 import json with open("./file.json", "r+") as file: f = json.load(file) file.tru

我正在使用Discord.py创建一个Discord bot。我创建了一个命令,该命令将使用用户指定的值更新外部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)
{
"key": "tes"
}
}
JSON文件

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)
{
"key": "tes"
}
}
我尝试过使用
f.update({“key”:“tes”})
但是没有区别

编辑:
通过将
file.truncate()
移动到
file.seek(0)
下面,问题得到了解决,因此-我知道您的
file.truncate()
file.truncate()
工作正常,但这是一个小小的黑魔法,没有太多使用,这会使您的代码不那么地道,更难维护

我认为,如果使用单独的文件句柄来读取和写入文件,这将更干净

filename = './file.json'
with open(filename) as fp:
    jsonstuff = json.load(fp)

jsonstuff['key'] = 'tes'
with open(filename, "w") as fp:
    json.dump(jsonstuff, fp, indent=4)

当您在没有参数的情况下调用
file.truncate()
时,它(文件的结尾)。然后,当您调用
file.seek(0)
时,它会移动到文件的开头,并开始在旧数据的基础上写入新数据。如果新内容比旧内容短(例如,将“test”字符串替换为“tes”),则一些旧内容将在末尾保留。以下是几种解决方案:

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

您正在覆盖原始文件;如果输出比输入短,则文件末尾附近的输入字符将保留在输出文件中。写入新文件,或重新打开文件,然后写入输出。