【问题标题】:do both json.load() and json.dump() at once in Python在 Python 中同时执行 json.load() 和 json.dump()
【发布时间】:2021-05-31 05:00:40
【问题描述】:

我正在尝试做这样的事情,它同时使用读取、附加和写入。

with open("data.json", mode="a+") as file:
            # 1.Reading old data
            data = json.load(file)  
            # 2. Updating old data with new data
            data.update(new_dict)
            # 3.Writing into json file
            json.dump(data,file,indent=4)

但它显示json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

【问题讨论】:

  • 您在另一个末尾附加了一个 JSON 字符串,使磁盘文件无效。您应该以r 模式读取文件,然后以w 模式重新打开以覆盖它。
  • 我认为错误发生在json.load 时。检查data.json的内容。您似乎将 JSON 附加到文件中,而不是替换它,导致在代码运行一次后两个 JSON 一个接一个地出现在文件中,这会弄乱第二次调用。写之前用file.seek(0)回到开头。
  • 是的,我想用 file.seek(0 ) 它给出了同样的错误。

标签: python json file file-handling


【解决方案1】:

首先您需要打开mode="r+" 中的文件。用新的更新旧数据,然后seek(0)到文件的开头,写入你更新的json数据,然后截断剩下的:

with open("data.json", mode="r+") as file:
    file.seek(0, 2)
    if file.tell():
        file.seek(0)
        data = json.load(file)  
        data.update(new_dict)
    else:
        data = new_dict
    file.seek(0)
    json.dump(data, file, indent=4)
    file.truncate()

它不适用于a+ 模式的原因是它总是在文件末尾写入,而与seek(0) 无关。因此,您更新的 json 数据只会像普通文本数据一样附加到旧的数据中,但由于它不是有效的 json 语法,因此会导致 JSON Decode 错误。

查看here 了解有关不同打开模式如何工作的更多详细信息。

【讨论】:

  • 这行不通。检查第 55 行 replit.com/@heysujal/Password-manager#main.py
  • @Sujal 好的,我检查了您的代码和data.json 文件。问题是最初您的 data.json 是一个空文件。所以json 无法加载它,因为它需要一个有效的条目。我已经修改了代码来处理这个问题。试试上面现在编辑的代码。
  • 我会在我尝试这个时告诉你。
猜你喜欢
  • 2014-07-01
  • 2020-09-24
  • 2019-04-28
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多