Как удалять данные из json массива?

Вообщем у меня есть массив:

введите сюда описание изображения

В нём хранятся всякие штуки

Я использую del mas[i] Но оно не работает

Вот мой код :

with open('keys.json', 'r', encoding='utf-8') as f: #открыли файл с данными
            mas = json.load(f) #загнали все, что получило

    print(key)
    for i in range(len(mas)):
        if (mas[i] == key):
            print(mas)

            await bot.send_message(
                    chat_id=message.chat.id,
                    text =  "okay" 
                    ) 
            text = 1
            sql.execute(f'UPDATE users SET sub = {text}  WHERE user_id = {message.from_user.id}')
            int(i)
            del mas[i]
      
        else:
            await bot.send_message(
                    chat_id=message.chat.id,
                    
                    text = "не окей" )

key это данные которые ввёл вользователь

А вот и ошибка (IndexError: list index out of range)

введите сюда описание изображения


Ответы (2 шт):

Автор решения: CrazyElf

У вас типичная ошибка - удаление элементов из списка, по которому вы итерируетесь в данный момент. Так делать нельзя, нумерация ломается - в списке остаётся меньше элементов, чем ожидается и индекс выскакивает за границу списка.

Одно из возможных решений - создавать новый список из нужных элементов, а не удалять ненужные из старого списка. И итерироваться лучше прямо по элементам списка, индекс вы больше ни для чего не используете кроме получения элемента:

new_mas = []
for item in mas:
    if (item == key):
      ...
   else:
      new_mas.append(item)
      ...
→ Ссылка
Автор решения: RusKFA
with open('keys.json', 'r', encoding='utf-8') as f: #открыли файл с данными
            mas = json.load(f) #загнали все, что получило

    if key in mas:
        text = 1
        await bot.send_message(chat_id=message.chat.id, text =  "okay")
        sql.execute(f'UPDATE users SET sub = {text}  WHERE user_id = {message.from_user.id}')
        
        mas.remove(key) # удаляем ключ
        with open('keys.json', 'w', encoding='utf-8') as f:
            json.dump(mas, f) #сохраняем то, что получилось
    else:
        await bot.send_message(chat_id=message.chat.id, text = "не окей" )
→ Ссылка