在Python中检查.json文件是否为空会产生JSONDecodeError

jgwigjjp  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(127)

我目前正在做另一个学校项目,我必须写入一个.json文件。因为这取决于文件是否为空,我在代码中有一个简单的if子句来处理这个问题:

json_start = {"messages": []}

with open(self._db, 'r') as json_file:
    first_char = json_file.read(1)
    if not first_char:
        json_content = json_start
        last_id = 0
    else:
        json_content = json.load(json_file)
        message_list = json_content.get("messages")
        last_id = message_list[-1].get("id")

字符串
正如你所看到的,我读取json_file的第一个字符来判断文件是否为空,如果不是,我用json.load(json_file)将文件的内容加载到json_content中。
但是,如果我的文件中有内容,像这样:

{
    "messages": [
        {
            "id": 1,
            "header": "Subj 1",
            "body": "body 1"
        }
    ]
}


由于某种奇怪的原因,我得到了一个JSONDecodeError: Extra data。我已经检查了文件中是否有任何不应该出现的空格,但没有发现任何空格。
为什么我会得到这个错误?

mrfwxfqh

mrfwxfqh1#

在您调用json_file.read(1)之后,json.load()将从文件的第二个字符开始阅读,这将是无效的。您应该倒回文件的开头。

with open(self._db, 'r') as json_file:
    first_char = json_file.read(1)
    if not first_char:
        json_content = json_start
        last_id = 0
    else:
        json_file.seek(0)
        json_content = json.load(json_file)
        message_list = json_content.get("messages")
        last_id = message_list[-1].get("id")

字符串

相关问题