M
M
max_1O2021-07-20 18:21:10
Python
max_1O, 2021-07-20 18:21:10

Can't add list to json?

Hello. Help me figure out what's wrong with the code, I'll explain the issue in the comments of the code. Thank you in advance

# код сравняет набранные очки и сохраняет рекорды в scores.json
def save_high_score(stats, settings, date_now, hour_now):
    with open('data/scores.json', 'r') as file:
        data = json.load(file)
        scores = data['scores'] #  список рекордных очков
        dates = data['dates'] # список времён когда была зарегистрована рекорд
        # для теста
        print("loaded score date data:", scores, dates, "len:", len(scores), len(dates)) 

    # список должна быть длины не более 7(установлена в settings.amount_of_score_labels)
    if len(scores) >= settings.amount_of_score_labels: 
        # заработает если список достиг лимита(седьмого индекса)
        for index in range(len(scores)):
            # сравниваем набранные очки и установленные ранее рекорды
            if int(stats.score) == int(scores[index]):
                # если уже есть такой рекорд, выйдем из цикла
                break
            elif int(scores[index])<int(stats.score):
                # если есть побитый рекорд, добавляем нового и убираем лишний индекс
                dates.insert(index, f"{date_now} - {hour_now}")
                scores.insert(index, stats.score)
                dates = dates[:7]
                scores = scores[:7]
                break
    elif len(scores)<settings.amount_of_score_labels:
        # заработает если список рекордов не достиг лимита(ниже 7)
        for index in range(len(scores)):
            # если уже есть такой рекорд, выйдем из цикла
            if int(stats.score) == int(scores[index]):
                break
            elif int(scores[index])<int(stats.score):
                # добавляем новый рекорд в соответствующем месте
                dates.insert(index, f"{date_now} - {hour_now}")
                scores.insert(index, stats.score)
                break
    elif len(scores) == 0:
        # заработает только в самом начале записи рекордов
        dates.append(f"{date_now} - {hour_now}")
        scores.append(stats.score)
    print(scores, dates) # для теста
    for obj in data:
        obj['dates'] = []
        # программа вывела ошибку в строке выше, текст ошибки ниже
        # TypeError: 'str' object does not support item assignment
        # в чем дело? я вроде список дал в значении obj['dates']
        obj['scores'] = []
        obj['dates'].extend(dates)
        obj['scores'].extend(scores)
    with open('data/scores.json', 'w') as file:
        file.write(data)
        file.close()

scores.json
{
    "dates": [],
    "scores": []
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
soremix, 2021-07-20
@SoreMix

objis a string, not a dictionary. Print it out and have a look.
Dictionary iteration through for ... in ...returns the name of the key, you have two keys: dates and scores. You receive'dates'['dates'] = []

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question