import json from copy import deepcopy def deep_diff(data, temp_data): new_data = {} for k in data.keys(): if isinstance(data[k], dict): if k not in temp_data: temp_data[k] = {} temp = deep_diff(data[k], temp_data[k]) if temp: new_data[k] = {} new_data[k] = temp else: if k in temp_data: if data[k] != temp_data[k]: new_data[k] = data[k] else: new_data[k] = data[k] return new_data def deep_merge(d, u, only_existing=True): for k, v in u.items(): if isinstance(v, dict): if only_existing: r = deep_merge(d.get(k, {}), v) d[k] = r else: d[k] = v else: d[k] = u[k] return d if __name__ == '__main__': files = [ "results/WVWZZZE1ZMP010760/2024/10/18/vehicle_WVWZZZE1ZMP010760_2024-10-15T12-05-23-268Z.json", # "results/WVWZZZE1ZMP010760/2024/10/19/vehicle_WVWZZZE1ZMP010760_2024-10-19T00-00-34-353Z.json", ] for file in files: with open(file, "r") as fp: src = json.load(fp) src_last = {} diffed_list = [] last = {} for s in src: diffed = deep_diff(s, last) diffed_list.append(deepcopy(diffed)) last = deepcopy(s) print(f"Diffed: {diffed}") merged_list = [] last = {} for d in diffed_list: merged = deep_merge(last, d) last = deepcopy(merged) merged_list.append(deepcopy(merged)) print(f"Merged: {merged}") assert src == merged_list