将新数据追加到python中的json文件

Ras*_*san 5 python json dictionary python-3.x

我在data.json文件中有下面的json数组

[{"type": "Even", "id": 1}, {"type": "Odd", "id": 2}, {"type": "Even", "id": 3}]
Run Code Online (Sandbox Code Playgroud)

我试图使用此代码将新数据追加到此json文件

    def foo(filename, dict_data):
    with open(filename, 'r') as json_data: 
        data = json.load(json_data)

    data.append(dict_data)

    with open(filename, 'w') as json_data: 
        json.dump(data, json_data)

    foo('data.json', lst)
Run Code Online (Sandbox Code Playgroud)

但我得到这个结果

[{"id": 1, "type": "Even"}, {"id": 2, "type": "Odd"}, {"id": 3, "type": "Even"}, [{"id": 4, "type": "Even new"}, {"id": 5, "type": "Odd new"}`]]
Run Code Online (Sandbox Code Playgroud)

但这是无效的json数据。 我的预期数据是

    [{"id": 1, "type": "Even"}, {"id": 2, "type": "Odd"}, {"id": 3, "type": "Even"}, {"id": 4, "type": "Even new"}, {"id": 5, "type": "Odd new"}`]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么。?

nos*_*klo 2

看起来您的变量dict_data不包含单个dict,而是list包含dicta 。你将.append它放在listouter内部list,从而生成一个嵌套结构

如果是这种情况,那么只需使用另一个来.extend扩展原始的:listlist

data.extend(dict_data)
Run Code Online (Sandbox Code Playgroud)

考虑将变量的名称更改dict_data为更有意义的名称,因为它甚至不包含dict.