NestJS调用Google Gemini API返回JSON格式数据异常问题
问题分析与解决
你的猜测没错,问题确实出在返回值处理部分。Gemini API虽然通过responseMimeType: 'application/json'指定了返回JSON格式,但result.response.text()方法返回的始终是字符串类型——哪怕内容是JSON结构。你需要手动将这个字符串解析为JSON对象,才能得到和教程一致的JSON格式返回结果。
修复步骤
- 调用
result.response.text()获取字符串后,用JSON.parse()解析成JSON对象 - 添加异常处理,避免解析失败导致报错
修改后的代码:
async generateVideo(prompt: string) { try { const model = this.genAI.getGenerativeModel({ model: 'gemini-1.5-flash', }); const generationConfig = { temperature: 1, topP: 0.95, topK: 64, maxOutputTokens: 8192, responseMimeType: 'application/json', }; const chatSession = model.startChat({ generationConfig, history: [ /*Removed because it was too long */ ], }); const result = await chatSession.sendMessage(prompt.toString()); const jsonString = result.response.text(); console.log(jsonString); // 解析字符串为JSON对象 const jsonData = JSON.parse(jsonString); return { data: jsonData, }; } catch (error) { // 可添加解析失败或API调用出错的处理逻辑 console.error('JSON解析失败或API调用出错:', error); throw error; // 或返回错误信息给前端 } }
补充说明
- 教程里的Next.js API路由可能在返回时自动做了JSON序列化处理,或者代码中已包含了解析步骤,所以看起来直接得到了JSON格式结果
- 务必确保Gemini返回的内容是标准JSON格式,若提示词表述模糊,可能返回带多余文本的字符串导致解析失败。可在提示词末尾明确要求:
"请严格返回标准JSON格式,不要添加任何额外说明文字"
内容的提问来源于stack exchange,提问作者Damilola Adegbemile
相关产品推荐
相关产品推荐

