- import json
-
- def compare_json(obj1, obj2, path=""):
- diff = []
- if isinstance(obj1, dict) and isinstance(obj2, dict):
- for key in obj1:
- if key not in obj2:
- diff.append([f"{path}.{key}", obj1[key], "", "yes"])
- else:
- sub_diff = compare_json(obj1[key], obj2[key], f"{path}.{key}")
- if len(sub_diff) > 0:
- diff += sub_diff
- else:
- diff.append([f"{path}.{key}", obj1[key], obj2[key], "no"])
- for key in obj2:
- if key not in obj1:
- diff.append([f"{path}.{key}", "", obj2[key], "yes"])
- elif isinstance(obj1, list) and isinstance(obj2, list):
- for i in range(min(len(obj1), len(obj2))):
- sub_diff = compare_json(obj1[i], obj2[i], f"{path}[{i}]")
- if len(sub_diff) > 0:
- diff += sub_diff
- else:
- diff.append([f"{path}[{i}]", obj1[i], obj2[i], "no"])
- if len(obj1) > len(obj2):
- for i in range(len(obj2), len(obj1)):
- diff.append([f"{path}[{i}]", obj1[i], "", "yes"])
- elif len(obj1) < len(obj2):
- for i in range(len(obj1), len(obj2)):
- diff.append([f"{path}[{i}]", "", obj2[i], "yes"])
- else:
- if obj1 != obj2:
- diff.append([path, obj1, obj2, "yes"])
- else:
- diff.append([path, obj1, obj2, "no"])
- return diff
-
- def print_diff(diff_keys):
- print("-"*110)
- print("{:<60} {:<20} {:<20} {:<10}".format("key", "file1.json", "file2.json", "is_diff"))
- print("-"*110)
-
- for key, value1, value2, is_diff in diff_keys:
- print("{:<60} {:<20} {:<20} {:<10}".format(key, str(value1), str(value2), is_diff))
-
- print("----------------------------------------------------------------------------------------------------------")
-
-
- def remove_long_keys(data, max_length, keys_to_remove=None):
- if keys_to_remove is None:
- keys_to_remove = []
- if isinstance(data, dict):
- for k, v in list(data.items()):
- if isinstance(v, str) and len(v) > max_length:
- del data[k]
- elif k in keys_to_remove:
- del data[k]
- else:
- remove_long_keys(v, max_length, keys_to_remove)
- elif isinstance(data, list):
- for item in data:
- remove_long_keys(item, max_length, keys_to_remove)
-
-
- if __name__ == "__main__":
- with open('file1.json', 'r') as file1:
- json1 = json.load(file1)
- remove_long_keys(json1, 20, ['seeds'])
-
- with open('file2.json', 'r') as file2:
- json2 = json.load(file2)
- remove_long_keys(json2, 20, ['seeds'])
-
-
- diff_keys = compare_json(json1, json2)
- print_diff(diff_keys)
运行结果: