const fs = require('fs'); const file = 'src/modules/book-generator/langgraph-generator.ts'; let content = fs.readFileSync(file, 'utf8'); // 修复1:添加双重转义处理 const fix1 = ` // 调试:打印前80个字符 console.log('[SubsectionParser] 原始前80字符:', JSON.stringify(cleanedStr.substring(0, 80))); // 处理双重转义:将 \\n 转换为 \n,\\t 转换为 \t 等 cleanedStr = cleanedStr.replace(/\\\\n/g, '\\n').replace(/\\\\t/g, '\\t').replace(/\\\\r/g, '\\r'); // 清理 JSON 字符串中的非法控制字符`; content = content.replace( ` // 调试:打印前80个字符 console.log('[SubsectionParser] 原始前80字符:', JSON.stringify(cleanedStr.substring(0, 80))); // 清理 JSON 字符串中的非法控制字符`, fix1 ); // 修复2:添加正则提取容错 const fix2 = ` } catch (parseErr) { // 尝试使用正则提取 subsections 数组 console.log('[SubsectionParser] 首次解析失败,尝试正则提取'); const subsectionsMatch = jsonCandidate.match(/"subsections"\\s*:\\s*(\\[[\\s\\S]*\\])/); if (subsectionsMatch) { try { const subsectionsJson = subsectionsMatch[1]; data = { subsections: JSON.parse(subsectionsJson) }; } catch (e) { console.error('[SubsectionParser] 正则提取后解析仍失败:', e); return null; } } else { console.error('[SubsectionParser] JSON 解析失败:', parseErr); return null; } }`; content = content.replace( ` } catch (parseErr) { console.error('[SubsectionParser] JSON 解析失败:', parseErr); return null; }`, fix2 ); fs.writeFileSync(file, content, 'utf8'); console.log('✅ parseSubsections 修复完成');