You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将响应字符串转为Java自定义类对象?Gson转换报错排查

问题分析与解决:Gson解析JSON字符串失败

错误原因

你的response字符串包含多余的单引号和前后空格,导致Gson接收到的内容并非合法的JSON对象,而是一个包裹着JSON的字符串。Gson期望解析的是{"name":"John", "age":30, "city":"New York"}这类纯JSON对象结构,但你的字符串实际内容是'{"name":"John", "age":30, "city":"New York"}'(带首尾单引号和空格),Gson会将整个内容识别为一个字符串值,而非JSON对象,因此抛出Expected BEGIN_OBJECT but was STRING错误。

解决方案

方案1:直接修正字符串格式

去掉多余的单引号和前后空格,使用纯JSON格式的字符串:

String response = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";

如果字符串是从外部获取的,无法直接修改,可先做清理处理:

// 去除前后空格,再移除首尾的单引号
String cleanedResponse = response.trim().replaceAll("^'|'$", "");
Temp t = g.fromJson(cleanedResponse, Temp.class);

方案2:二次解析适配格式

如果无法避免带单引号的格式,可以先将外层字符串解析出来,再二次解析为Temp对象:

// 先把包裹的字符串解析出来
String jsonContent = g.fromJson(response, String.class);
// 再解析为Temp对象
Temp t = g.fromJson(jsonContent, Temp.class);

额外提示

你的Temp类字段当前是默认访问权限,Gson可以正常解析,但如果后续出现解析异常,建议:

  • 将字段设为public修饰
  • 添加无参构造函数(Gson虽能兼容无构造函数的类,但规范写法建议补充)

内容的提问来源于stack exchange,提问作者Lyrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:27:40