Python:将JSON添加到现有JSON中

2024-09-29 01:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个json文件。我希望能够加载两者,然后将第二个条目添加到第一个条目中。这可能包括添加字段或列表项。类似于以下示例:

file1.json:{“水果”:[{“名称”:“苹果”,“颜色”:“红色”},{“名称”:“橙色”,“颜色”:“橙色”}]}

file2.json:{“水果”:[{“名称”:“草莓”,“颜色”:“红色”,“大小”:“小”},{“名称”:“橙色”,“大小”:“中等”}]}

结果:{“水果”:[{“名称”:“苹果”,“颜色”:“红”},{“名称”:“橙”,“颜色”:“橙”,“大小”:“中”},{“名称”:“草莓”,“颜色”:“红”,“大小”:“小”}

一开始我想把它们加载到字典中,然后尝试更新:

import simplejson

filea = open("file1.json", 'r')
dicta = simplejson.loads(filea.read())

fileb = open("file2.json", 'r')
dictb = simplejson.loads(fileb.read())

filea.close()
fileb.close()

dicta.update(dictb)

由于这两个字典都有一个“水果”条目,我希望它们能合并,但它很简单地将dicta中的条目重写为dictb中的条目。

我意识到我可以编写代码来循环这个例子,但是我使用的实际文件要大得多,也更复杂。我在想,在我重新发明轮子之前,是否有一个图书馆已经做了这样的事情。值得一提的是,我使用的是Python2.6.2。

谢谢你的建议!


Tags: 文件苹果名称json颜色条目file1橙色
2条回答

给定列表中解析的jsonparsed_json

transformed_data = []
for data in parsed_json:
    transformed_data.append({})
    for fruit in data['fruit']:
        fruit_copy = fruit.copy()
        transformed_data[-1][fruit_copy.pop('name')] = fruit_copy
merged_fruit = defaultdict(dict)
for name, values in transformed_data.iteritems():
    merged_fruit[name].update(values)

你可以用2.7+的听写理解,但你说的是2.6.2。假设您声明在现实世界中,您正在合并多个字段,那么您可以在将transformed_data成员设置为来自源的任何字段时更改键。如果不想破坏原始解析数据,也可以删除copy

您需要扩展列表来检查每个值。Python现在不可能基于字典的name项合并它们:

def merge(lsta, lstb):
    for i in lstb:
        for j in lsta:
            if j['name'] == i['name']:
                j.update(i)
                break
        else:
            lsta.append(i)

for k,v in dictb.items():
    merge(dicta.setdefault(k, []), v)

因此dicta变量将是:

{'fruit': [{'color': 'red', 'name': 'apple'}, 
           {'color': 'orange', 'name': 'orange', 'size': 'medium'},
           {'color': 'red', 'name': 'strawberry', 'size': 'small'}]}

相关问题 更多 >