如何将响应字符串转为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
相关产品推荐
相关产品推荐

