【问题标题】:How can I get a value from a JSON file from python function如何从 python 函数的 JSON 文件中获取值
【发布时间】:2021-12-07 16:59:13
【问题描述】:

好的,这就是我设置 JSON 文件的方法:

async def openinf():
    with open("infractions.json", "r") as f:
        users = json.load(f)
    return users

async def createinfraction(user, type, mod, date, caseid):
        users = await openinf()

        users[str(user.id)] = {}
        users[str(user.id)]["type"] = type
        users[str(user.id)]["mod"] = mod.id
        users[str(user.id)]["date"] = date
        users[str(user.id)]["caseid"] = caseid


        with open("infractions.json", "w") as f:
            json.dump(users, f)
            print("done function")
        return True

这将在 json 文件中打印:{"581457749724889102": {"type": "Warning", "mod": 581457749724889102, "date": "04/12/2021 18:52:28", "caseid": "f59427df-552a-11ec-8dfd-e03f49c55de5"}}

现在,我尝试这样做:

try:

            users = await openinf()

            type = users[str(member.id)]["type"]
            modid = users[str(member.id)]["mod"]
            date = users[str(member.id)]["date"]
            caseid = users[str(member.id)]["caseid"]

            embed = discord.Embed(title = f"Infractions for {member}", colour = 0x0f9492)
            i = 1
            mod = await client.fetch_user(modid)
            for user in users:
                if user == member.id:
                    print("yes")
                    i += 1
                    embed.add_field(name= f"Infraction #{i}",  value = f"**{type}** \nCase ID: {caseid}\nModerator: {mod}\nDate:{date}\n", inline = False )

但这对我没有帮助,它不会返回任何错误(我放了一个 except 会在之后打印错误)。我假设我没有正确获取 id 对象。

【问题讨论】:

  • 我不清楚这个问题。是否要使用函数从 json 文件(infractions.json)中返回值?
  • 是的,基本上我需要 ID(在我给出的示例中为 581457749724889102)
  • 你试过printing users吗?将所有内容包裹在毯子中 try except 不是调试的好方法。如果错误发生,请让错误发生,并在您的问题中包含回溯。
  • 也许你已经省略了一些代码,但是这两个函数没有理由是异步的。它们不等待任何东西,例如阻塞函数。

标签: python json python-jsons


【解决方案1】:

如果user == member.id: 错误,因为字典键user 不是数字,而是字符串。

您需要将其类型转换为整数才能进行比较

if int(user) == member.id:
    ...

if user == str(member.id):
    ...

成功了。

由于您已经多次键入了 member.id,请将其移至其自己的变量中并在整个代码中使用它。

member_id = str(member.id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多