将数据添加到现有 JSON 文件而不覆盖它

Adding data to an existing JSON file without overwriting it

思路:
我想将 JSON 对象添加到现有 JSON 文件,但不覆盖文件中的现有数据。
uid-003 对象应从属于现有 uid-xxx 条目之后的 uID

问题:
没有任何一种解决方法能发挥应有的作用。 append() 方法也 returns 错误:AttributeError: 'dict' object has no attribute 'append'.

当前代码
Python代码:

user = {
    "uid-003": {
        "username": "username-3",
        "pinned": "pinned",
        "created": {
            "date": "DD/MM/YYYY",
            "time": "HH:MM:SS"
        },
        "verified": {
            "checked": False
        }
    }
}

with open("path/to/json", "r+") as file:
    data = json.load(file)
    
    temp = data['uID']
    temp.append(user)

    json.dump(data, file)

JSON 文件:

{
    "uID": {
        "uid-001": {
            "username": "username-1",
            "pinned": false,
            "created": {
                "date": "20-12-2021",
                "time": "21:13:39"
            },
            "verified": {
                "checked": false
            }
        },
        "uid-002": {
            "username": "username-2",
            "pinned": true,
            "created": {
                "date": "20-12-2021",
                "time": "21:13:39"
            },
            "verified": {
                "checked": false
            }
        }
    }
}

您需要做的就是将 user 词典添加到现有的 'uID' 键中。如果你更新一个用 r+ 打开的文件并且你正在增加文件中的数据量,你需要在写入之前查找到开头。这应该有帮助:

import json

THE_FILE = 'the_file.json'

user = {
    "uid-003": {
        "username": "username-3",
        "pinned": "pinned",
        "created": {
            "date": "DD/MM/YYYY",
            "time": "HH:MM:SS"
        },
        "verified": {
            "checked": False
        }
    }
}

with open(THE_FILE, 'r+') as jfile:
    j = json.load(jfile)
    for k, v in user.items():
        j['uID'][k] = v
    jfile.seek(0)
    json.dump(j, jfile, indent=4)

注意:在这种情况下,user.items() 上的迭代并不是真正必要的,但用于说明在 [=15= 时如何使用此模式]user 包含的词典比您示例中的词典多

AttributeError: 'dict' object has no attribute 'append' Blockquote

这是非常明确的,您正在尝试将一个元素附加到对象中,因为它是一个列表。

您需要做的是将您的 uID 从 obj 转换为 as 列表。如果您以后需要操作此对象,它将简化您的生活

另一种方式是:

user = {
    "uid-003": {
        "username": "username-3",
        "pinned": "pinned",
        "created": {
            "date": "DD/MM/YYYY",
            "time": "HH:MM:SS"
        },
        "verified": {
            "checked": False
        }
    }
}

with open("path/to/json", "r+") as file:
    data = json.load(file)
    keys = user.keys()
    data['uID'][keys[0]] = user[0]

    json.dump(data, file)

AttributeError: 'dict' object has no attribute 'append'

您可以使用dict update

import json

with open('file.json', 'r+') as file:
    data = json.load(file)
    data['uID'].update(user)
    file.seek(0)
    json.dump(data, file, indent=4)