Помогите с записью словаря в JSON файл

Рейтинг: 0Ответов: 1Опубликовано: 26.05.2023

Необходимо сделать код, который будет в случае, если список словарей уже существует, добавлять новый.

А если нет, то создавать.

Вот код:

def dataInsert():
    global tree
    global count
    global file
    global file_name

    dict = {'date': dateEntry.get(),
            'service': serviceEntry.get(),
            'month': monthEntry.get(),
            'borrow': borrowEntry.get(),
            'spent': spentEntry.get()}

    def saveToJSON(data, filename):
        with open(filename, 'w') as f:
            json.dump(data, f)

    if dateEntry.get() and serviceEntry.get() and monthEntry.get(
    ) and borrowEntry.get() and spentEntry.get():
       if data == []:
           data = [dict]
           saveToJSON(data, file_name)
       else:
           data.append(dict)
           saveToJSON(data, file_name)
    else:
        messagebox.showwarning("Warning",
                               "You should write something in the text boxes")

Ответы

▲ 0

Вы можете использовать os.path.exist и json.load:

import json
import os


def dataInsert():
    global tree
    global count
    global file
    global file_name

    dict = {'date': dateEntry.get(),
            'service': serviceEntry.get(),
            'month': monthEntry.get(),
            'borrow': borrowEntry.get(),
            'spent': spentEntry.get()}

    def saveToJSON(data, filename):
        with open(filename, 'w') as f:
            json.dump(data, f)

    if not os.path.exists(file_name):
        data = []
    else:
        try:
            with open(file_name, 'r') as f:
                data = json.load(f)
        except json.JSONDecodeError:
            data = []

    if dateEntry.get() and serviceEntry.get() and monthEntry.get(
    ) and borrowEntry.get() and spentEntry.get():
        if not data:
            data = [dict]
            saveToJSON(data, file_name)
        else:
            data.append(dict)
            saveToJSON(data, file_name)
    else:
        messagebox.showwarning("Warning",
                               "You should write something in the text boxes")