File size: 1,633 Bytes
3438cdb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import os
import json

def load_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return json.load(f)

def get_unique_key(base_key, existing_keys):
    """在已有 key 中查找唯一 key,例如 key, key_1, key_2..."""
    if base_key not in existing_keys:
        return base_key
    i = 1
    while f"{base_key}_{i}" in existing_keys:
        i += 1
    return f"{base_key}_{i}"

def merge_all_jsons_in_folder(folder_path='.', output_path="merged_all_unique.json"):
    merged_data = {}

    for filename in os.listdir(folder_path):
        if filename.endswith(".json"):
            file_path = os.path.join(folder_path, filename)
            try:
                data = load_json(file_path)
                if not isinstance(data, dict):
                    print(f"{filename} 不是一个字典,跳过。")
                    continue

                for key, value in data.items():
                    unique_key = get_unique_key(key, merged_data)
                    if unique_key != key:
                        print(f"键 '{key}' 重复,已改为 '{unique_key}' 来合并。")
                    merged_data[unique_key] = value

            except Exception as e:
                print(f"加载 {filename} 出错:{e}")

    with open(output_path, 'w', encoding='utf-8') as f:
        json.dump(merged_data, f, ensure_ascii=False, indent=2)

    print(f"\n合并完成,共 {len(merged_data)} 条记录写入 {output_path}")

if __name__ == "__main__":
    merge_all_jsons_in_folder(folder_path='.', output_path="merged_all_unique.json")