Как я могу получить значение из файла JSON из функции python

#python #json #python-jsons

#питон #json #python-jsons

Вопрос:

Итак, вот как я настроил файл 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 )  

Но это мне не помогает, он не возвращает никаких ошибок (я поставил исключение, которое напечатало бы ошибку после). Я предполагаю, что я неправильно получил объект id.

Комментарии:

1. Вопрос мне не ясен. Вы хотите вернуть значение из файла json (infractions.json) с помощью функции?

2. да, в основном мне нужен идентификатор (581457749724889102 в приведенном мною примере)

3.Вы пробовали print инг users ? Заворачивание всего в одеяло try except -не лучший способ отладки. Позвольте ошибке произойти, если это произойдет, и включите обратную связь в свой вопрос.

4. Возможно, вы пропустили какой-то код, но нет никаких причин для того, чтобы любая из этих функций была асинхронной. Они ничего не ждут и, как таковые, блокируют функции.

Ответ №1:

если user == member.id: это неправильно, так как ключ dict user -это не число, а строка.

вам нужно ввести приведение его к целому числу, чтобы выполнить сравнение

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

или

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

делает свое дело.

Как вы уже набрали, приведите member.id несколько раз переместите это в свою собственную переменную и используйте ее в коде.

 member_id = str(member.id)