#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import re def fix_json_syntax_error(): """修复JSON语法错误,正确处理换行符""" # 读取原文件 with open('src/pages/ProjectLibraryPage/index.jsx', 'r', encoding='utf-8') as f: content = f.read() # 读取学生完成的项目数据 with open('网页未导入数据/学生完成的项目.json', 'r', encoding='utf-8') as f: data = json.load(f) # 提取化工项目数据 chemical_projects = [] for item in data: if item.get('所属就业管家') == '化工': unit_name = item.get('单元名称查询', '') ai_projects = item.get('AI项目名称', []) if unit_name and ai_projects: cleaned_projects = [] for project in ai_projects: cleaned_project = re.sub(r'^\d+\.', '', project).strip() cleaned_projects.append(cleaned_project) chemical_projects.append({ 'unitName': unit_name, 'projects': cleaned_projects }) # 读取markdown文件内容 try: with open('网页未导入数据/化工产业/学生完成的项目/化工储罐液位自动补水与搅拌联锁控制.md', 'r', encoding='utf-8') as f: md_content = f.read() # 解析markdown内容为sections sections = [] lines = md_content.split('\n') current_section = None current_content = [] for line in lines: if line.startswith('# '): if current_section: # 正确处理换行符和引号 section_content = '\n'.join(current_content).strip() # 转义引号和换行符 section_content = section_content.replace('"', '\\"').replace('\n', '\\n') sections.append({ 'title': current_section, 'content': section_content }) current_section = line[2:].strip() current_content = [] elif current_section: current_content.append(line) # 添加最后一个section if current_section: section_content = '\n'.join(current_content).strip() section_content = section_content.replace('"', '\\"').replace('\n', '\\n') sections.append({ 'title': current_section, 'content': section_content }) # 创建可点击项目数据,使用正确的JSON格式 clickable_project = { "id": "clickable-1", "name": "化工储罐液位自动补水与搅拌联锁控制项目", "unitName": "化工PLC可编程逻辑控制系统", "isClickable": True, "content": { "title": "化工储罐液位自动补水与搅拌联锁控制项目", "description": "本项目基于PLC可编程逻辑控制器,实现化工储罐液位的自动监控、补水控制以及搅拌器的联锁保护功能。", "images": [], "sections": sections } } except FileNotFoundError: clickable_project = { "id": "clickable-1", "name": "化工储罐液位检测与泵组启停PLC控制项目", "unitName": "化工PLC电气控制", "isClickable": True, "content": { "title": "化工储罐液位检测与泵组启停PLC控制项目", "description": "基于PLC实现化工储罐液位自动检测与泵组联动控制,确保生产过程安全稳定。", "images": [], "sections": [ { "title": "项目概述", "content": "本项目实现了化工储罐液位的自动检测与泵组启停的PLC控制系统,通过液位传感器实时监测储罐状态,自动控制进料泵和出料泵的运行,确保化工生产过程的安全性和稳定性。" } ] } } # 生成myProjectsData JavaScript代码 my_projects_js = "const myProjectsData = [\n" for i, project in enumerate(chemical_projects): my_projects_js += " {\n" my_projects_js += f' "unitName": "{project["unitName"]}",\n' my_projects_js += ' "projects": [\n' for j, proj_name in enumerate(project["projects"]): # 转义引号 escaped_name = proj_name.replace('"', '\\"') my_projects_js += f' "{escaped_name}"' if j < len(project["projects"]) - 1: my_projects_js += "," my_projects_js += "\n" my_projects_js += " ]\n" my_projects_js += " }" if i < len(chemical_projects) - 1: my_projects_js += "," my_projects_js += "\n" my_projects_js += "];" # 生成clickableProjects JavaScript代码 clickable_js = "const clickableProjects = [\n" clickable_js += " {\n" clickable_js += f' "id": "{clickable_project["id"]}",\n' clickable_js += f' "name": "{clickable_project["name"]}",\n' clickable_js += f' "unitName": "{clickable_project["unitName"]}",\n' clickable_js += f' "isClickable": {str(clickable_project["isClickable"]).lower()},\n' clickable_js += ' "content": {\n' clickable_js += f' "title": "{clickable_project["content"]["title"]}",\n' clickable_js += f' "description": "{clickable_project["content"]["description"]}",\n' clickable_js += ' "images": [],\n' clickable_js += ' "sections": [\n' for i, section in enumerate(clickable_project["content"]["sections"]): clickable_js += ' {\n' clickable_js += f' "title": "{section["title"]}",\n' clickable_js += f' "content": "{section["content"]}"\n' clickable_js += ' }' if i < len(clickable_project["content"]["sections"]) - 1: clickable_js += "," clickable_js += "\n" clickable_js += ' ]\n' clickable_js += ' }\n' clickable_js += ' }\n' clickable_js += "];" # 替换内容 # 替换myProjectsData pattern1 = r'const myProjectsData = \[[\s\S]*?\];' content = re.sub(pattern1, my_projects_js, content) # 替换clickableProjects pattern2 = r'const clickableProjects = \[[\s\S]*?\];' content = re.sub(pattern2, clickable_js, content) # 写入文件 with open('src/pages/ProjectLibraryPage/index.jsx', 'w', encoding='utf-8') as f: f.write(content) print("✅ 已修复JSON语法错误") print(f"✅ 更新了 {len(chemical_projects)} 个化工单元的数据") print("✅ 修复了字符串转义问题") if __name__ == "__main__": fix_json_syntax_error()