如何对 2 个 json 文件之间的相同键值进行算术减法并将其打印在输出 json 文件中

How to do arithmetic substraction of same identical key values between 2 json files and print it in output json file

我有 2 个 json 文件,两个文件的关键字段相同。我想得到你的帮助,对 2 个文件之间的相同关键字段的值进行算术减法,并出现在第 3 个输出文件中 [两个 json 文件的增量输出 json 文件]。

第一个和第二个 json 文件也有 n 个索引数组,所以我们需要循环执行此操作以映射第三个 json 输出文件中的差异值。

示例:

第一个 Json 文件:file1.json

[
  {
    "name": "Rock",
    "pri": 21,
    "size": 502173,
    "gets": 0,
    "searches": 40,
    "search_time_ms": 25,
    "fetches": 2,
    "cache_mem_size": 0,
    "cache_size": 0,
    "cache_total": 2,
    "hits": 0,
    "misses": 2,
    "index_total": 0,
    "index_current": 0,
    "merges_total": 0,
    "refresh_total": 0
  },
  {
    "name": "Rock:config",
    "pri": 21,
    "size": 512173,
    "gets": 0,
    "searches": 40,
    "search_time_ms": 25,
    "fetches": 2,
    "cache_mem_size": 0,
    "cache_size": 0,
    "cache_total": 2,
    "hits": 0,
    "misses": 2,
    "index_total": 0,
    "index_curr": 0,
    "merges_tot": 0,
    "refresh_tot": 0
  }
]

第二个 Json 文件:file1.json:

[
  {
    "name": "Rock",
    "pri": 22,
    "size": 602173,
    "gets": 0,
    "searches": 40,
    "search_time_ms": 25,
    "fetches": 2,
    "cache_mem_size": 0,
    "cache_size": 0,
    "cache_total": 2,
    "hits": 0,
    "misses": 2,
    "index_total": 0,
    "index_current": 0,
    "merges_total": 0,
    "refresh_total": 0
  },
  {
    "name": "Rock:config",
    "pri": 31,
    "size": 602173,
    "gets": 0,
    "searches": 40,
    "search_time_ms": 25,
    "fetches": 2,
    "cache_mem_size": 0,
    "cache_size": 0,
    "cache_total": 2,
    "hits": 0,
    "misses": 2,
    "index_total": 0,
    "index_curr": 0,
    "merges_tot": 0,
    "refresh_tot": 0
  }
]

输出 json 文件:file3.json 应如下所示。

[
  {
    "name": "Rock",
    "pri": 1,
    "size": 100000,
    "gets": 0,
    "searches": 40,
    "search_time_ms": 25,
    "fetches": 2,
    "cache_mem_size": 0,
    "cache_size": 0,
    "cache_total": 2,
    "hits": 0,
    "misses": 2,
    "index_total": 0,
    "index_current": 0,
    "merges_total": 0,
    "refresh_total": 0
  },
  {
    "name": "Rock:config",
    "pri": 10,
    "size": 90000,
    "gets": 0,
    "searches": 40,
    "search_time_ms": 25,
    "fetches": 2,
    "cache_mem_size": 0,
    "cache_size": 0,
    "cache_total": 2,
    "hits": 0,
    "misses": 2,
    "index_total": 0,
    "index_curr": 0,
    "merges_tot": 0,
    "refresh_tot": 0
  }
]

请帮我理一下逻辑

只需按照以下步骤即可轻松完成

  • 从 2 个 json 文件中读取 json 对象并将它们保存为字典列表
  • 遍历字典列表并执行所需的操作
  • 将计算的输出指令保存到新列表
  • 将结果列表写入新的 json 文件

代码如下,

    import json
    
    with open('file1.json') as f:
        data1 = json.load(f)
    with open('file2.json') as f:
        data2 = json.load(f)
    data = []
    for i,j in zip(data1, data2):
        x = {}
        for m,n in zip(i.items(), j.items()):
            # if m[0] != "name":
            if m[0] == "pri" or m[0] == "size":
                x[m[0]] = int(j[m[0]]) - int(i[m[0]])
            else:
                x[m[0]] = i[m[0]]
        data.append(x)
    with open('file3.json', 'w') as o:
        json.dump(data, o)