2015-12-12 2 views
0

В настоящее время у меня возникают проблемы с попыткой сохранить файл .json и перезагрузить его позже. Кажется, что программа сберегает несколько правильно, но я получаю сообщение об ошибке при попытке перезагрузить его позже. Я не уверен, что я делаю неправильно, и попытался исправить это примерно на 30 минут. Обратите внимание, что я новичок в Python и буду признателен за упрощенные ответы.Проблемы с сохранением json в Python: TypeError: объект 'int' не подлежит индексированию

Это файл json (который никогда не будет прежним).

{"stat.playOneMinute":44,"stat.leaveGame":1,"stat.timeSinceDeath":44,"achievement.exploreAllBiomes":{"value":0,"progress":["ForestHills"]}} 

Это ошибка я получаю при попытке перезагрузить JSon файл позже:

Traceback (most recent call last): 
    File "C:\Users\oiest\Desktop\Code\Minecraft Editor\v1.0.0\MCEditor.py", line 91, in <module> 
    MainMenu() 
    File "C:\Users\oiest\Desktop\Code\Minecraft Editor\v1.0.0\MCEditor.py", line 26, in MainMenu 
    EditWorld() 
    File "C:\Users\oiest\Desktop\Code\Minecraft Editor\v1.0.0\MCEditor.py", line 51, in EditWorld 
    EditProcess() 
    File "C:\Users\oiest\Desktop\Code\Minecraft Editor\v1.0.0\MCEditor.py", line 69, in EditProcess 
    print('stat.timeSinceDeath is currently ' + str(data['stat.timeSinceDeath'])) 
TypeError: 'int' object is not subscriptable 

Это код, который вызывает ошибку:

with open(stats_path + json_file, "r+") as jsonFile: 
     data = json.load(jsonFile) 
     print(data) 
     print('') 

     print('What do you wish to edit?') 
     print('stat.timeSinceDeath') 
     user_input = input('Edit Stat: ') 
     if user_input == 'stat.timeSinceDeath': 
      print('stat.timeSinceDeath is currently ' + str(data['stat.timeSinceDeath'])) 
      print('') 
      user_input = int(input('New Stat: ')) 





      data['stat.timeSinceDeath'] = user_input 
      jsonFile.write(json.dumps(data)) 
      jsonFile.seek(0) # rewind 
      jsonFile.write(json.dumps(data['stat.timeSinceDeath'])) 
      jsonFile.truncate() 
      print(data['stat.timeSinceDeath']) 
+0

Пожалуйста, уменьшите исходную программу до небольшой возможной ** полной ** программы, которая все еще демонстрирует проблему. (Обычно достаточно 10-20 строк.) Скопируйте пасту, которая ** вся ** короткая программа в ваш вопрос. См. [Mcve] и [ask] для получения дополнительной информации. –

+0

@ Robᵩ Я обновил код. – orias

+0

Ваш код еще не заполнен. Пожалуйста, предоставьте краткую, полную программу, которая демонстрирует проблему. –

ответ

1

ошибка означает, что то, что в вашем файле данных просто целое число. Как это получилось? Ну, проблема здесь:

jsonFile.write(json.dumps(data)) 
jsonFile.seek(0) # rewind 
jsonFile.write(json.dumps(data['stat.timeSinceDeath'])) 
jsonFile.truncate() 

Вы выписывать новый файл, а затем перемотать и выписывать только timeSinceDeath поверх него. Это целое число. Таким образом, в следующий раз, когда вы запустите скрипт, данные JSON - это просто целое число, и вы получите сообщение об индексировании целого числа.

Вы можете видеть это очень четко из своего звонка print(data). (Хорошая идея, добавив print, чтобы помочь отлаживать, но даже лучше обращать на это внимание!)

Чтобы избежать этого, не перезаписывайте свой файл данных только целым числом. Возьмите эти две средние линии. И верните исходный JSON в файл.

+0

Как вы помещаете JSON в исходный файл? – orias

+0

Закрыть. Вам все равно нужно перемотать файл перед перезаписью. –

+0

На самом деле я обнаружил, что только удаление третьей линии решило мою проблему. Мне все еще нужна вторая строка, но теперь моя программа работает. – orias

Смежные вопросы