import json # 读取食品项目案例数据 with open('网页未导入数据/食品产业/食品项目案例.json', 'r', encoding='utf-8') as f: food_projects = json.load(f) # 创建项目单元映射 project_units_mapping = {} for project in food_projects: project_name = project.get('案例名称', '') # 获取复合能力课(如果有) compound_units_str = project.get('对应单元名称(复合能力课)', '') compound_units = [] if compound_units_str and compound_units_str != '无': # 分割多个单元(用逗号或顿号分隔) compound_units = [unit.strip() for unit in compound_units_str.replace('、', ',').split(',') if unit.strip()] # 获取垂直能力课 vertical_units_str = project.get('对应单元名称(垂直能力课)', '') vertical_units = [] if vertical_units_str and vertical_units_str != '无': # 分割多个单元(用逗号或顿号分隔) vertical_units = [unit.strip() for unit in vertical_units_str.replace('、', ',').split(',') if unit.strip()] # 添加到映射 if project_name: project_units_mapping[project_name] = { "compoundUnits": compound_units, "verticalUnits": vertical_units } # 生成JavaScript文件内容 js_content = """// 项目案例对应单元映射数据 - 食品产业 // 基于 网页未导入数据/食品产业/食品项目案例.json export const projectUnitsMapping = { """ # 添加每个项目的映射 for project_name, units in project_units_mapping.items(): js_content += f' "{project_name}": {{\n' # 复合能力课 js_content += ' "compoundUnits": [\n' for unit in units['compoundUnits']: js_content += f' "{unit}",\n' if units['compoundUnits']: js_content = js_content.rstrip(',\n') + '\n' js_content += ' ],\n' # 垂直能力课 js_content += ' "verticalUnits": [\n' for unit in units['verticalUnits']: js_content += f' "{unit}",\n' if units['verticalUnits']: js_content = js_content.rstrip(',\n') + '\n' js_content += ' ]\n' js_content += ' },\n' # 移除最后的逗号 js_content = js_content.rstrip(',\n') + '\n' js_content += '};\n\n' # 添加辅助函数 js_content += """// 获取项目的复合能力课程 export const getCompoundUnits = (projectTitle) => { if (!projectTitle) return []; // 直接匹配 if (projectUnitsMapping[projectTitle]) { return projectUnitsMapping[projectTitle].compoundUnits || []; } // 尝试去除后缀后匹配(如"详情") const cleanTitle = projectTitle.replace(/详情$/, ''); if (projectUnitsMapping[cleanTitle]) { return projectUnitsMapping[cleanTitle].compoundUnits || []; } return []; }; // 获取项目的垂直能力课程 export const getVerticalUnits = (projectTitle) => { if (!projectTitle) return []; // 直接匹配 if (projectUnitsMapping[projectTitle]) { return projectUnitsMapping[projectTitle].verticalUnits || []; } // 尝试去除后缀后匹配(如"详情") const cleanTitle = projectTitle.replace(/详情$/, ''); if (projectUnitsMapping[cleanTitle]) { return projectUnitsMapping[cleanTitle].verticalUnits || []; } return []; }; // 获取项目的所有对应单元 export const getProjectUnits = (projectTitle) => { const mapping = projectUnitsMapping[projectTitle]; if (!mapping) return []; return [...mapping.compoundUnits, ...mapping.verticalUnits]; }; """ # 写入文件 with open('src/data/projectUnitsMapping.js', 'w', encoding='utf-8') as f: f.write(js_content) print(f"已生成食品产业项目单元映射文件") print(f"共处理 {len(project_units_mapping)} 个项目") # 显示统计信息 compound_count = sum(1 for p in project_units_mapping.values() if p['compoundUnits']) vertical_count = sum(1 for p in project_units_mapping.values() if p['verticalUnits']) print(f"包含复合能力课的项目:{compound_count} 个") print(f"包含垂直能力课的项目:{vertical_count} 个") # 显示前3个项目作为示例 print("\n示例映射:") for i, (name, units) in enumerate(list(project_units_mapping.items())[:3]): print(f"\n{name}:") if units['compoundUnits']: print(f" 复合能力课:{', '.join(units['compoundUnits'])}") if units['verticalUnits']: print(f" 垂直能力课:{', '.join(units['verticalUnits'])}")