| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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 修复完成');
|