1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """
- @Authors: yangzihao(yangzihao@china-icv.cn)
- @Data: 2024/04/22
- @Last Modified: 2024/04/22
- @Summary: Config jsons merge and process.
- """
- import json
- def merge_json(base_json, compare_json):
-
- for key, value in compare_json.items():
-
- if key not in base_json:
- base_json[key] = value
- else:
-
- if isinstance(value, dict) and isinstance(base_json[key], dict):
- merge_json(base_json[key], value)
-
- elif isinstance(value, list) and isinstance(base_json[key], list):
- for idx, item in enumerate(value):
- if idx < len(base_json[key]) and isinstance(item, dict):
-
- merge_json(base_json[key][idx], item)
- elif idx >= len(base_json[key]) and isinstance(item, dict):
-
- base_json[key].append(item)
- else:
-
- if base_json[key] != value:
- if isinstance(value, dict):
- merge_json(base_json[key], value)
- else:
- base_json[key] = ""
- def compare_and_merge(base_file, *compare_files):
-
- with open(base_file, 'r', encoding='utf-8') as f:
- base_data = json.load(f)
-
- for compare_file in compare_files:
- with open(compare_file, 'r', encoding='utf-8') as f:
- compare_data = json.load(f)
-
- merge_json(base_data, compare_data)
- return base_data
- if __name__ == '__main__':
-
-
- merged_data = compare_and_merge('config1.json', 'config2.json', 'config3.json')
-
- with open('output123.json', 'w', encoding='utf-8') as f:
- f.write(json.dumps(merged_data, indent=4, ensure_ascii=False))
- print("over.")
|