Failed to parse AI response as JSON at analyzeScript (geminiService.ts:203:15) a...

2025年12月16日 00:53 状态: processing

🚨 错误信息

[vite] connecting... react-dom-client.development.js:28004 Download the React DevTools for a better development experience: https://react.dev/link/react-devtools client:912 [vite] connected. geminiService.ts:74 发送文本请求到: https://www.dmxapi.cn/v1beta/models/gemini-2.5-flash:generateContent geminiService.ts:95 文本请求成功完成 App.tsx:241 Error: Failed to parse AI response as JSON at analyzeScript (geminiService.ts:203:15) at async handleAnalyze (App.tsx:214:22)

🤖 AI解决方案

报错分析报告

错误翻译


text
原文:Error: Failed to parse AI response as JSON
译文:错误:无法将AI响应解析为JSON格式

原因分析


根本原因geminiService.ts第203行在尝试将AI服务返回的响应解析为JSON时失败。

具体分析

  • AI服务(Gemini)返回的数据不是有效的JSON格式

  • 可能是以下情况导致:

  • - 服务器返回了非JSON格式的响应(如HTML错误页面、纯文本等)
    - JSON格式不正确(缺少引号、括号不匹配等)
    - 网络问题导致响应不完整
  • 从日志可见,请求成功发送到 https://www.dmxapi.cn/v1beta/models/gemini-2.5-flash:generateContent 且显示"文本请求成功完成",但返回内容无法解析
  • 解决方案

    ``typescript
    // geminiService.ts - 修改 analyzeScript 函数
    async function analyzeScript(scriptContent: string): Promise {
    try {
    const response = await sendTextRequest(scriptContent);

    // 添加调试日志,查看原始响应
    console.log('原始响应:', response);

    // 检查响应是否为空
    if (!response) {
    throw new Error('AI服务返回空响应');
    }

    // 尝试解析JSON
    let parsedResponse;
    try {
    parsedResponse = JSON.parse(response);
    } catch (jsonError) {
    console.error('JSON解析失败,原始响应:', response);
    throw new Error(
    无法解析AI响应: ${jsonError.message});
    }

    // 继续原有逻辑...
    return processAnalysisResult(parsedResponse);

    } catch (error) {
    console.error('分析脚本时出错:', error);
    throw error;
    }
    }
    `

    立即调试步骤

  • 打开浏览器开发者工具 → Network标签

  • 重新触发错误,找到对应的API请求

  • 查看Response选项卡中的原始响应内容

  • 检查响应头确保 Content-Type: application/json
  • ️ 预防措施

    1. 增强API响应验证


    typescript
    // 在调用JSON.parse前添加验证
    function safeJsonParse(jsonString: string): T {
    if (typeof jsonString !== 'string') {
    throw new Error('输入必须是字符串');
    }

    // 基本JSON格式检查
    const trimmed = jsonString.trim();
    if (!(trimmed.startsWith('{') && trimmed.endsWith('}')) &&
    !(trimmed.startsWith('[') && trimmed.endsWith(']'))) {
    throw new Error('响应不是有效的JSON对象或数组');
    }

    return JSON.parse(jsonString);
    }

    2. 使用axios等HTTP客户端库


  • 设置响应类型验证:responseType: 'json'`

  • 自动处理JSON解析,提供更好的错误信息

  • 内置重试和错误处理机制
  • 3. 最佳实践建议


  • 添加响应拦截器:在所有API调用中统一处理JSON解析错误

  • 启用详细日志:生产环境记录API响应摘要,开发环境记录完整响应

  • 实现后备策略:JSON解析失败时返回默认结构,而不是直接崩溃
  • ---

    请按照上述步骤检查API响应格式,如问题持续,请提供Network面板中的具体响应内容以供进一步分析。