将数据添加到现有 JSON 文件而不覆盖它
Posted
技术标签:
【中文标题】将数据添加到现有 JSON 文件而不覆盖它【英文标题】:Adding data to an existing JSON file without overwriting it 【发布时间】:2022-01-22 18:42:26 【问题描述】:想法:
我想将 JSON 对象添加到现有 JSON 文件,但不覆盖文件中的现有数据。
uid-003
对象应该在现有的 uid-xxx
条目之后从属于 uID
。
问题:
没有任何解决方案可以正常工作。 append()
方法也返回错误: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
【问题讨论】:
【参考方案1】:您需要做的就是将您的 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() 的迭代并不是真正需要的,但它可以说明当 user 包含更多字典时如何使用此模式不仅仅是您示例中的那个
【讨论】:
满足我所需要的一切。非常感谢!【参考方案2】:AttributeError: 'dict' 对象没有属性 'append' 块引用
这是非常明确的,您试图在对象中附加一个元素,因为它是一个列表。
您需要做的是将您的 uID 从 obj 转换为列表。如果您以后需要操作此对象,它将简化您的生活
另一种方式是:
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)
【讨论】:
【参考方案3】:AttributeError: 'dict' 对象没有属性 '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)
【讨论】:
以上是关于将数据添加到现有 JSON 文件而不覆盖它的主要内容,如果未能解决你的问题,请参考以下文章
如何在索引 2 处向 pandas 数据帧添加额外的行而不覆盖现有索引