Считать несколько json файлов python

У меня имеется 2 Json файла, с вот таким содержимым

{
    "ID":"item_1",
    "NAME":"Sword",
    "ATK":"10"
}
{
    "ID":"item_2",
    "NAME":"Iron Sword",
    "ATK":"20"
}

Как мне считать их с 1 папки и вывести в виде списка и позже к каждому из них обратиться через консоль?

Пример:

╔══|Предметы|════
‖ [1] Sword
‖ [2] Iron Sword
‖ [3] -
‖ [4] -
╚════════════════

Ввожу 1

╔══|Действие|════
‖ Вы взяли Sword
╚════════════════

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

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

Возожно я чуть-чуть не понял вопрос, если будет так, то я буду вводить правки

Код:


from json import dumps as encode, loads as decode
import os

def get_items() -> list[str]:
    files = os.listdir("./items/")

    for i, f in enumerate(files):
        if not f.endswith(".json"):
            files.pop(i)
    
    return files

def get_data() -> list[dict]:
    items_json: list[str] = [] # В JSON формате
    items: list[dict] = [] # Декодированные элементы
    items_files = get_items()

    for f in items_files:
        with open("items/"+f, 'r') as json_f:
            items_json.append(json_f.read())
    
    for item in items_json:
        decoded_item = decode(item)

        if isinstance(decoded_item, dict):
            items.append(decoded_item)
    
    return items

def main() -> int:
    items = get_data()

    print("╔══|Предметы|════")
    
    for i in range(len(items)):
        print(f"‖ [{i+1}] {items[i]['NAME']}")
    
    print("╚════════════════\n")

    INPUTED_CHOICE = False
    while not INPUTED_CHOICE:
        try:
            selected_item = int(input("Выберите предмет (цифра): "))
            
            if selected_item > len(items) or selected_item <= 0:
                print("Неверный индекс\n")
                continue
            
            selected_item-=1
            break
        except ValueError:
            print("Недопустимый ввод\n")
    
    print(f"""
╔══|Действие|════
‖ Вы взяли {items[selected_item]['NAME']}
╚════════════════

╔══|Данные|══════
‖ Урон {items[selected_item]['ATK']}]
‖ ID [{items[selected_item]['ID']}]
╚════════════════
""")

    return 0

if __name__ == "__main__":
    exit(main())

Как работает код?


Первым делом, в функции main, вызывается функция get_data

Она нужна чтобы прочитать все файлы и декодировать их

get_data, в свою очередь, будет вызывать функцию get_items, которая будет читать все файлы, а get_data декодирует их

По итогу, в main получается перменная items (тип list[dict]), которая хранит все декодированные данные из файлов

Важно!

Все файлы должны находиться в папке items/

Далее программа выводит все оружия (данные из переменной items)

После этого выводиться выбор, в котором обходиться вариант, когда мы указываем не число (например Hello), и обходиться вариант, когда мы вводим индекс оружия, которого нет

И в конце выводиться, что мы выбрали какое-то оружие, и выводиться информация о нем (урон и ID)

→ Ссылка