Python:将字典附加到 JSON 列表:

时间:2021-01-06 14:31:54

标签: python json python-3.x

我想在我的 JSON 文件中创建一个字典列表。但是,问题在于 JSON 没有正确附加新数据。这是我的代码:

import json

json_data = [
    {
    'name': 'Luke',
    'age': 27
    },
    {
    'name': 'Harry',
    'age': 32
    },
    ]
with open('data.json', 'a+') as file:
    json.dump(json_data, file)

JSON 只是在每次追加尝试时创建另一个完整列表:

[
    {"name": "Luke", "age": 27}, 
    {"name": "Harry", "age": 32}
][
    {"name": "Luke", "age": 27}, 
    {"name": "Harry", "age": 32}
][
    {"name": "Luke", "age": 27}, 
    {"name": "Harry", "age": 32}
]

我想要一个包含所有这些字典的列表。以下是理想情况下它应该是什么样子的示例:

[
    {"name": "Luke", "age": 27}, 
    {"name": "Harry", "age": 32},
    {"name": "Luke", "age": 27}, 
    {"name": "Harry", "age": 32},
    {"name": "Luke", "age": 27}, 
    {"name": "Harry", "age": 32},
]

我如何创建这样的东西? 谢谢你的帮助! :)

1 个答案:

答案 0 :(得分:0)

使用 eval() 快速修复解决方案:

import json

json_data = [
    {
    'name': 'Luke',
    'age': 27
    },
    {
    'name': 'Harry',
    'age': 32
    },
    ]

with open('data.json', 'r+') as file:  # read and append
    stored_info = eval(file.readline())  # using eval() to convert list in file to an actual list
    for i in stored_info:
        json_data.append(i)
    file.seek(0)  # clear file
    json.dump(json_data, file)

但是,这仅在 data.json 存在并且已经包含信息时才有效。您可能需要检查 data.json 是否存在(这意味着如果只有程序编辑 data.json,则已经有信息):

...
try: 
    with open('data.json', 'r+') as file:  # read and append
        stored_info = eval(file.readline())  # using eval() to convert list in file to an actual list
        for i in stored_info:
            json_data.append(i)
        file.seek(0)  # clear file
        json.dump(json_data, file)
except:  # data.json doesn't exist
    with open('data.json', 'w') as file:
        json.dump(json_data, file)