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解决方案

报错分析报告

错误翻译

原文: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 且显示"文本请求成功完成",但返回内容无法解析
  • 解决方案

    // geminiService.ts - 修改 analyzeScript 函数
    async function analyzeScript(scriptContent: string): Promise<AnalysisResult> {
      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响应验证

    // 在调用JSON.parse前添加验证
    function safeJsonParse<T>(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面板中的具体响应内容以供进一步分析。