":{"message":"json: cannot unmarshal object into Go struct field OpenAIResponses...

2026年05月20日 13:51 23.84 秒 success

错误信息

{"error":{"message":"json: cannot unmarshal object into Go struct field OpenAIResponsesResponse.tool_choice of type string (request id: 2026052013344557151630fiwz8mr6)","type":"rix_api_error","param":"","code":"bad_response_body"}}

AI 解决方案

🔍 错误翻译

原文: json: cannot unmarshal object into Go struct field OpenAIResponsesResponse.tool_choice of type string
译文: JSON: 无法将对象反序列化为Go结构体字段 OpenAIResponsesResponse.tool_choice 的类型为 string

🎯 原因分析

  • 🚫 根本原因:Go代码中定义的 OpenAIResponsesResponse 结构体里,tool_choice 字段被声明为 string 类型,但实际接收到的API响应中,tool_choice 是一个JSON对象(object),而非字符串,导致反序列化失败。

  • 📍 具体位置:错误发生在JSON反序列化过程,涉及 OpenAIResponsesResponse 结构体的 tool_choice 字段。这通常出现在调用OpenAI API并解析响应时。

💡 解决方案

tool_choice 字段的类型从 string 修改为能兼容对象的类型,例如 interface{} 或自定义结构体。以下是修复示例:

// 原始结构体(可能有问题)
type OpenAIResponsesResponse struct {
    // 其他字段...
    ToolChoice string `json:"tool_choice"` // 类型错误
}

// 修复方案1:使用 interface{} 兼容任意JSON值
type OpenAIResponsesResponse struct {
    // 其他字段...
    ToolChoice interface{} `json:"tool_choice"` // 允许字符串或对象
}

// 修复方案2:定义具体结构体(如根据OpenAI文档)
type ToolChoice struct {
    Type string `json:"type"` // 假设对象有type字段,按实际API调整
    // 其他可能的字段...
}

type OpenAIResponsesResponse struct {
    // 其他字段...
    ToolChoice ToolChoice `json:"tool_choice"`
}

🛡️ 预防措施

  • 📖 参考API文档:在定义Go结构体映射JSON响应时,务必查阅OpenAI API文档,确认 tool_choice 字段支持的数据类型(字符串或对象),以确保结构体定义准确。

  • 🛠️ 使用代码生成工具:利用在线工具(如 json-to-go)从实际API响应JSON样本自动生成Go结构体,减少手动定义错误。

  • ⚠️ 添加错误处理:在JSON反序列化处添加详细的错误日志,例如使用 json.Unmarshal 时捕获错误并打印响应内容,便于快速调试。