Search code examples
jsoncomparesubtraction

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


I've 2 json files of with identical key fields on both the file. I would like to get your assistance to do arithmetic subtraction of values of same key field between 2 files and present in 3rd output file [ delta of two json files to output json file].

Also 1st and 2nd json files has n of array of indicies so we need to do this in loop to map the difference values in 3rd json output file.

Example:

1st Json file: 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
  }
]

2nd Json file: 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
  }
]

Output json file: file3.json should look like below.

[
  {
    "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
  }
]

please help me with the logic


Solution

  • This can be done as simple as u follow the following steps

    • Read the json object from 2 json files and save them as list of dictionaries
    • Loop through the list of dicts and perform your required manipulations
    • Save calculated output dicts to a new list
    • Write the resultant list to a new json file

    the code is as follows,

        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)