【问题标题】:How to merge two json files in one?如何将两个json文件合并为一个?
【发布时间】:2020-11-13 14:00:17
【问题描述】:

如何将两个 json 文件与第一个文件和第二个文件中的所有信息合并为一个?

例如:

json1 = {"info": [{"id": "3", "book_id": "88" }]}
json2 = {"info": [{"id": "100", "book_id": "77" }]}
final_result = {
  "info": [
    {"id": "3", "book_id": "88" },
    {"id": "100", "book_id": "77"}
  ]
}

现在只是更新它,并从第一个文件夹中删除所有信息

import json

with open("folder1/1.json") as fin1:
    data1 = json.load(fin1)
with open("folder2/1.json") as fin2:
    data2 = json.load(fin2)
data1.update(data2)
with open("together.json", "w") as fin3:
    json.dump(data1, fin3)

【问题讨论】:

  • “将 JSON 文件合并为一个”是什么意思?结果应该是什么?对象列表?还是应该添加新的密钥?
  • 结果将是 dict。只需要将它们加在一起
  • “将它们加在一起”是什么意思?比如说,{1: 5} add {1: 6, 2: 9} 应该是{1: 6, 2: 9},还是{1: [5, 6], 2: 9},还是{'1_old': 5, '1_new': 6, 2: 9},还是……?换句话说:一个示例将有助于理解您希望如何“添加”它们。
  • json1 - {"info": [{"id": "3", "book_id": "88" }]}, json2 {"info": [{"id": "100", "book_id": "77" }]} = final_result {"info": [{"id": "3", "book_id": "88" }, {"id": "100", "book_id": "77"]}

标签: python json


【解决方案1】:

这完全取决于您拥有的数据类型,假设您要合并 2 个 JSON 文件以生成一个新文件,其中每个 JSON 文件都被结构化为您可以执行的列表的一部分:

import json

with open("1.json") as fin1:
    data1 = json.load(fin1)
with open("2.json") as fin2:
    data2 = json.load(fin2)

new_json = [data1,data2]

with open('data.json', 'w') as f:
    json.dump(new_json, f)

或者你可以用 dict 语法做同样的事情,两者都会生成一个完美的 JSON。如果您需要在一个复杂的合并操作中合并两个 JSON 文件,它会变得更加复杂。查看您的数据会有所帮助。

【讨论】:

    【解决方案2】:

    我猜您有 2 个具有相同(或重叠)键的对象。要将两者都写入新文件,您可以执行以下操作

    json.dump([data1, data2], fin3)
    

    json.dump({folder1: data1, folder2: data2}, fin3)
    

    编辑 - 给定您指定的预期输出结构,您可以像这样合并对象

    def merge_dicts(*dicts):
        r = {}
        for d in dicts:
            for k, v in d.items():
                r.setdefault(k, []).extend(v)
        return r
    

    (或使用其他解决方案之一 herehere

    然后你只需将这个合并的字典写入 json:

    with open('data.json', 'w') as f:
        json.dump(merge_dicts(data1, data2), fin3)
    

    通常记住,从 json 加载的数据只是一个字典或列表,因此您可以像其他 Python 变量一样合并和操作它们,然后再将它们保存回 json。

    【讨论】:

    • 嘿!谢谢你,你能告诉我如何处理文件夹1和文件夹2中的所有文件(Jsons的名称相同)。
    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多