【问题标题】:Extend JSON files with Python使用 Python 扩展 JSON 文件
【发布时间】:2020-04-18 07:29:27
【问题描述】:

我在 stackoverflow 上查找了我的问题,我的问题有几个解决方案,但在我的情况下不起作用。
我想在我的 json 文件中添加一些新条目。

我的 json 文件(data.json):

{
        "blabla1":"dubdub1",
        "blabla2":"dubdub2"
}

我的代码(使用 extend 方法):

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)
result = list()

result.extend(data)
result.extend({'blabla3': 'dubdub3'})
data = result

print(data)

这给了我这样的输出:

['blabla1', 'blabla2', 'blabla3']

我的代码(使用 append 方法):

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)
result = list()

result.append(data)
result.append({'blabla3': 'dubdub3'})
data = result

print(data)

这给了我这样的输出:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}, {'blabla3': 'dubdub3'}]

我到底需要的是这样的:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}]

那么我哪里错了?如果已经回答了相同的问题,我很抱歉,但我找不到对我有用的东西。谢谢!

【问题讨论】:

  • 为什么你想要一个只有 1 个元素的列表?你真的只想要一个用新键/值更新的字典吗?
  • 这是我发现的一种解决方案,但对我不起作用。我对使用 python 或 json 文件并没有真正的经验。我只想在字典中添加新条目,然后再覆盖 json 文件(但我认为之后应该可以在没有帮助的情况下覆盖文件)

标签: python json file merge


【解决方案1】:

无需大量更改代码,您就可以像这样实现您的原始请求:

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)

data.update({'blabla3': 'dubdub3'})
result = [data]

print(result)

这将产生您预期的结果:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}]


简短说明:

您调用的方法 json.load 创建了一个字典对象 data,如下所示:

{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}

然后通过调用 result.append(data),您将 data 字典添加为列表对象 result 中的第一个公民:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}]

每隔一次你调用 append() 方法,你只会将另一个成员添加到列表中:

[{'blabla1': 'dubdub1', 'blabla2': 'dubdub2'}, obj2, obj3, ...]

相反,您似乎想向数据字典中添加另一个键值对,如 previous answer 中所述

【讨论】:

    【解决方案2】:

    这更接近你想要的吗?使用新键和值更新的字典

    import json
    
    with open('data.json') as json_data_file:
        data = json.load(json_data_file)
    data['blabla3'] = 'dubdub3'
    print(data)  # {'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}
    

    编辑:

    要同时更新多个条目,您可以使用update

    data.update({
        'blabla3': 'dubdub3',
        'blabla4': 'dubdub4',
    })
    

    【讨论】:

    • 所以在我想同时添加更多条目的情况下,我会使用 for each 循环来遍历我想要添加的字典中的键?
    • 要在 1 个通话中添加条目,您可以使用 update。更新了答案
    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2021-02-07
    • 2012-03-12
    • 2016-12-14
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多