You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:07