使用Python将数据编辑为JSON
我有一个简单的JSON使用Python将数据编辑为JSON,python,json,Python,Json,我有一个简单的JSON { "users":[ { "last result": "2%", "login": "user", "password": "1", "id": "1" } ] } 我想添加新用户,然后按ID删除用户 例如: 我想补充一点: {"id":"2", "login": "admin", "password":"22", "las
{
"users":[
{
"last result": "2%",
"login": "user",
"password": "1",
"id": "1"
}
]
}
我想添加新用户,然后按ID删除用户
例如:
我想补充一点:
{"id":"2", "login": "admin", "password":"22", "last result": "10%"}
在我的操作之后,json应该如下所示:
{
"users":[
{
"last result": "2%",
"login": "1user",
"password": "1",
"id": "2"
},
{
"id":"2",
"login": "admin",
"password":"22",
"last result": "10%"
}
]
}
我试过这个:
...
user = {"id": 2, "login": "admin", "password": "1", "last result": "2%"}
def save_data_to_json(user):
jsonFile = open("auth.json", "r+")
data = json.load(jsonFile)
jsonFile.close()
data["users"] = user
jsonFile = open("auth.json", "a+")
jsonFile.write(json.dumps(data))
jsonFile.close()
但在此之后,我的JSON看起来有点奇怪:
{
"users":[
{
"last result": "2%",
"login": "1user",
"password": "1",
"id": "2"
}
]
}{"users": {"id": 2, "login": "1user", "password": "1", "last result": "2%"}}
您应该使用
w
而不是a+
打开auth.json
。当您使用a+
打开时,这意味着您将输出附加到其中,而不是覆盖它。请尝试此代码
import json
user = {"id": 2, "login": "admin", "password": "1", "last result": "2%"}
def save_data_to_json(user):
jsonFile = open("/tmp/auth.json", "r+")
data = json.load(jsonFile)
jsonFile.close()
data["users"].append(user)
jsonFile = open("/tmp/auth.json", "w")
jsonFile.write(json.dumps(data))
jsonFile.close()
save_data_to_json(user)
您的json对象有一个键“users”,它是用户对象的集合。但在代码中,您正在执行
data['users']=user
,这只是用新用户替换现有集合,而不是添加到其中:
>>> s = '''{
... "users":[
... {
... "last result": "2%",
... "login": "user",
... "password": "1",
... "id": "1"
... }
... ]
... }'''
>>> o = json.loads(s)
>>> o['users']
[{u'last result': u'2%', u'login': u'user', u'password': u'1', u'id': u'1'}]
>>> user = {"id": 2, "login": "admin", "password": "1", "last result": "2%"}
>>> o['users'] = user
>>> o['users']
{'last result': '2%', 'login': 'admin', 'password': '1', 'id': 2}
现在请注意对象是如何更改的。它不再是一个用户集合,而是现在只有一个用户对象。这将对读取此文件的任何应用程序产生影响
相反,您需要这样做:
>>> o['users'].append(user)
>>> o['users']
[{u'last result': u'2%', u'login': u'user', u'password': u'1', u'id': u'1'}, {'last result': '2%', 'login': 'admin', 'password': '1', 'id': 2}]
现在“users”集合中有两个用户,可以按其值删除用户:
>>> o['users'] = [u for u in o['users'] if u['login'] != 'admin'] # Get rid of the admin
>>> o['users']
[{u'last result': u'2%', u'login': u'user', u'password': u'1', u'id': u'1'}]
然后您可以将对象转换回json并将其写出
综上所述,您的代码是:
with open('auth.json', 'r') as f:
data = json.load(f)
data['users'].append(user)
# If you want to delete
data['users'] = [u for u in o['users'] if u['login'] != 'admin'] # Get rid of the admin
# Write it back
with open('auth.json', 'w') as f:
json.dump(data, f)