JSON添加不必要的花括号

2024-06-17 13:41:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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)

JSON文件

{
"key": "tes"
}
}

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

编辑: 通过将file.truncate()移到file.seek(0)下方解决了该问题


Tags: 文件key用户py命令jsonbotseek
2条回答

所以-我知道你已经做到了,但是你的file.truncate()file.truncate()有点像黑魔法ey,没有太多使用,这会使你的代码不那么地道,更难维护

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

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()时,它是truncates the file at the current location(文件的结尾)。然后,当您调用file.seek(0)时,它移动到文件的开头,并开始在旧数据之上写入新数据。如果新内容比旧内容短(例如,将“test”字符串替换为“tes”),则一些旧内容将在末尾保留。以下是几种解决方案:

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

相关问题 更多 >