如何修改JSON文件字典结构并为每条条目生成唯一ID
JSON字典结构转换实现方案
原代码问题说明
- 键与值分开遍历,每次给
lastdict赋值时都会覆盖之前的内容,最终只能保留最后一个键值对 - 循环嵌套位置错误,每读取一个新的国家文件,就会重复遍历所有已经处理过的历史国家数据,产生大量冗余操作
- 没有为每个键值对单独生成新字典存入结果列表,共用同一个字典变量导致数据覆盖
修复后实现代码(含ID生成功能)
import os import json # 可选:如果你的JSON文件是单引号格式不符合标准JSON,就导入ast模块用下方的方法加载 # import ast # 存储所有转换后条目的总列表 total_result = [] # 全局自增ID,从1开始计数 item_id = 1 # 定义文件目录路径,方便后续修改 file_dir = "DOCS/Countries Data" for filename in os.listdir(file_dir): # 只处理json后缀的文件,避免读取到系统隐藏文件报错 if not filename.endswith(".json"): continue file_path = os.path.join(file_dir, filename) with open(file_path, 'r', encoding='utf-8') as f: text = f.read() # 标准JSON加载方式 country_data = json.loads(text) # 如果是单引号的非标准JSON,就替换成下面这行 # country_data = ast.literal_eval(text) # 单个国家的转换结果列表(如果需要每个文件单独输出就用这个变量) country_result = [] # 遍历当前国家字典的每一组键值对 for title, name in country_data.items(): # 每组键值对生成一个新字典,加入ID current_item = { "id": item_id, "title": title, "name": name } country_result.append(current_item) total_result.append(current_item) # ID自增 item_id += 1 # 打印单个国家的转换结果,符合你要求的输出结构 print(f"{filename}的转换结果:") print(json.dumps(country_result, indent=4, ensure_ascii=False)) # 如果需要把所有国家的条目合并输出到一个JSON文件,就取消下面的注释 # with open("total_result.json", "w", encoding="utf-8") as f: # json.dump(total_result, f, indent=4, ensure_ascii=False)
补充说明
- ID生成默认采用全局自增规则,所有文件的所有条目ID唯一。如果需要每个国家文件内部单独编号,可以把
item_id的初始化放在遍历文件名的循环内部即可。 - 代码增加了JSON文件过滤逻辑,避免读取到目录内的非JSON文件导致运行报错。
- 输出时用
json.dumps加indent=4参数,可以直接输出格式化后的JSON结构,和你要求的格式完全匹配。
内容的提问来源于stack exchange,提问作者arkanjie
相关产品推荐
相关产品推荐

