2017-04-21 266 views
2

所以我很努力将一个元素添加到保存在我的机器上的json列表中。我想要的是json将用用户输入的消息进行更新。但是我得到的错误“JSONDecodeError:期待值:第1行1列(字符0)”将元素添加到Json列表(Python)

 with open(JSON_FILE, "r+") as data_file: 
      data = json.load(data_file) 
      data[0]['test'].append(enteredString) 
      json.dump(data, data_file) 

下面是我试图更新JSON。

{"test": [ 
    "test 1", 
    "test 2" 
]} 

我想让它保存新的保存的json文件。

{"test": [ 
    "test 1", 
    "test 2", 
    "New String" 
]} 

我不明白我做错了什么,任何帮助将不胜感激。

+1

如何在文件保存?它看起来不是有效的json格式(是'data = json.load(data_file)'引发错误的行吗?)。如果你能够用json加载文件,那么你会做'data ['test']。append(enteredString)';该列表被包含为一个针对'test'键的值,因此索引不起作用。 – roganjosh

回答

1

看起来您需要从第3行删除[0]索引操作...您的JSON是其顶级对象,而不是列表。所以,你不应该需要在索引抢元素“0”,如果没有索引0

with open(JSON_FILE, "r+") as data_file: 
      data = json.load(data_file) 
      data['test'].append(enteredString) 
      json.dump(data, data_file) 
2

有2个问题,在您的代码:

1)要引用列表中,使用数据['test'] - data ['test'] [0]是'测试1'中的第一个't'

2)要覆盖输出文件,您需要先关闭文件并重新打开。正如所写,代码将附加到JSON_FILE。

下面是更正后的代码:

data = json.load(open(JSON_FILE, "rb")) 
data['test'].append(enteredString) 
json.dump(data, open(JSON_FILE, "wb"))