【问题标题】:How to write JSON files with a good structure如何编写结构良好的 JSON 文件
【发布时间】:2021-07-23 15:35:38
【问题描述】:

你好 stackoverflows 用户,

我正在学习 python 并在 json 文件中写入/读取

我想用 discord.py 制作一个日志系统,它可以捕获所有消息,将它们写入一个 json 文件,并在执行命令时检索数据,使用用户参数过滤并返回过滤后的数据。

问题是我无法编写结构良好的 json 文件,目前我的结构目前看起来像这样:

{
    "Messages": [
        {
            "Guild_id": 831900150115991605,
            "User_id": 225282512438558720,
            "User_name": "JsuisEnPeignoir",
            "Message": "Yo!"
        },
        {
            "Guild_id": 831900150115991605,
            "User_id": 225282512438558720,
            "User_name": "JsuisEnPeignoir",
            "Message": "Hello, my friend!"
        }
    ]
}

但我想做这样的事情:

{
    "Messages": [
        831900150115991605 : [ <- guild_id
             225282512438558720 : [ <- user_id
                 "User_name": "JsuisEnPeignoir",
                 "Message": "Yo!"
        ]]
        },
}

(这是近似值)

目前我的代码是这样的:

with open('debug_data.json', 'r') as filename:
            data = json.load(filename)
        data['Messages'].append({
            'Guild_id' : ctx.guild.id,
            'User_id' : ctx.author.id,
            'User_name' : ctx.author.name,
            'Message' : ctx.message.content[8:2000]
        })

        with open('debug_data.json', 'w') as outfile:
            json.dump(data, outfile, indent=4)

我应该写什么代码来获得如图所示的结构?

【问题讨论】:

    标签: python json discord discord.py


    【解决方案1】:

    在您的代码示例中,您缺少一个括号,所以我假设您想要的是这种 json 结构

    {
        "Messages": {
            831900150115991605 : {
                225282512438558720 : {
                    [{"User_name": "JsuisEnPeignoir", "Message": "Yo!"}, {"User_name": "JsuisEnPeignoirModifié", "Message": "Un autre message"}]
                },
                225282512438558721 : {
                    [{"User_name" : "MissingBracket", "Message": "There is a missing bracket in your exemple"}]
                }
            }
        }
    }
    

    我认为在 Python 中使用 JSON 的最佳实践是,当您读取数据时,始终检查密钥是否在内部,如果没有,则使用默认值添加它(在这种情况下,为空字典或空列表) .

    我会这样做

    with open('debug_data.json', 'r') as filename:
                data = json.load(filename)
            if ctx.guild.id not in data["Messages"]:
                data["Messages"].append({ctx.guild.id: []})
            if ctx.author.id not in data["Messages"][ctx.guild.id]:
                data["Messages"][ctx.guild.id].append({ctx.author.id: []})
            data["Messages"][ctx.guilld.id][ctx.author.id].append({"User_name": ctx.author.display_name, "Message": ctx.message.content})
    
            with open('debug_data.json', 'w') as outfile:
                json.dump(data, outfile, indent=4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 2022-11-10
      • 2021-04-16
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多