尝试使用 python 将元素添加到现有 JSON

Posted

技术标签:

【中文标题】尝试使用 python 将元素添加到现有 JSON【英文标题】:Attempting to add an element to existing JSON with python 【发布时间】:2021-05-18 21:59:02 【问题描述】:

我正在制作一个使用经验和金钱系统的不和谐机器人。我有一个现有的 users.json,看起来像这样(将 id 更改为随机数):


    "12345678987654321": 
        "experience": 177,
        "level": 5,
        "money": 2250
    ,
    "12345678987654321": 
        "experience": 0,
        "level": 1,
        "money": 250
    

我想添加一个额外的字段,如下所示:


    "12345678987654321": 
        "experience": 177,
        "level": 5,
        "money": 2250,
        "new": 0
    ,
    "12345678987654321": 
        "experience": 0,
        "level": 1,
        "money": 250,
        "new": 0
    

我目前正在尝试做的是:

async def create_user(user):
    users = await get_user_data()
    if str(user.id) not in users:
        users[str(user.id)] = 
        users[str(user.id)]['experience'] = 0
        users[str(user.id)]['level'] = 1
        users[str(user.id)]['money'] = 250
    else:
        return False

    with open('users.json', 'w') as f:
        json.dump(users, f, sort_keys = True, indent = 4, ensure_ascii = False)
    return True

async def get_user_data():
    with open('users.json', 'r') as f:
        users = json.load(f)
    return users

async def new_field(ctx):
    user = ctx.author
    a = await create_user(user)
    users = await get_user_data()
    if not users[str(user.id)]['new']:
        users[str(user.id)]['new'] = 0
        return True
    else:
        return False
    with open('users.json', 'w') as f:
        json.dump(users, f, sort_keys = True, indent = 4, ensure_ascii = False)

【问题讨论】:

【参考方案1】:

检查对象键不存在

if key not in obj:

不是

if not obj[key]:

在您的代码中

if 'new' not in users[str(user.id)]:
    users[str(user.id)]['new'] = 0
    return True

【讨论】:

以上是关于尝试使用 python 将元素添加到现有 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 将对象添加到现有数组

将新数据从 JSON 添加到现有表

XSLT 如何组合模板并将现有字段添加到某些元素

基于现有的 CSV 添加一些变量并附加到 Python 中的现有 JSON

向现有 json 模式添加额外字段并即时生成 c# 类

使用 Python 将现有 BQ 表中的列添加到另一个 BQ 表