Python:将JSON添加到现有JSON中

Mat*_*ape 3 python json dictionary

假设我有两个json文件.我希望能够加载两者,然后将第二个条目添加到第一个.这可能包括添加字段或列表条目.像下面的例子:

file1.json:{"fruit":[{"name":"apple","color":"red"},{"name":"orange","color":"orange"}]}

file2.json:{"fruit":[{"name":"strawberry","color":"red","size":"small"},{"name":"orange","size":"中等"}]}

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

起初我想把它们加载到字典中并尝试更新:

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)
Run Code Online (Sandbox Code Playgroud)

由于两个字典都有一个"水果"条目,我希望它们会合并,但它简单地用dictb中的条目覆盖了条目中的条目.

我意识到我可以编写代码来循环这个例子,但是我使用的实际文件要大得多,也要复杂得多.我想知道是否有一个图书馆在我重新发明轮子之前已经做过类似的事情了.对于它的价值,我使用的是Python 2.6.2.

感谢您的任何建议或意见!

JBe*_*rdo 6

您需要扩展列表检查每个值.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)
Run Code Online (Sandbox Code Playgroud)

所以dicta变量将是:

{'fruit': [{'color': 'red', 'name': 'apple'}, 
           {'color': 'orange', 'name': 'orange', 'size': 'medium'},
           {'color': 'red', 'name': 'strawberry', 'size': 'small'}]}
Run Code Online (Sandbox Code Playgroud)