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

使用GSON将JSON数组转为GroupModel列表失败求助

解决Gson解析JSON数组时的JsonSyntaxException异常

这个异常com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY其实很好理解——你现在用的是解析单个对象的Gson代码,但你的输入是一个JSON数组,Gson本来等着看{(对象的起始符号),结果看到的是[(数组的起始符号),自然就报错了。

下面给你两种最常用的正确解析方式,结合你的场景来举例:

假设你的JSON和GroupModel类是这样的

先确认下你的JSON结构应该是数组格式,比如:

[
  {"groupId": 1, "groupName": "技术部"},
  {"groupId": 2, "groupName": "产品部"}
]

对应的GroupModel类:

public class GroupModel {
    private int groupId;
    private String groupName;
    
    // 记得添构造器、getter/setter,或者让Gson通过反射访问字段
}

方法1:直接解析成GroupModel数组

如果你习惯用数组来处理,直接把目标类型指定为GroupModel[].class即可:

Gson gson = new Gson();
// 正确解析JSON数组为GroupModel数组
GroupModel[] groupArray = gson.fromJson(yourJsonString, GroupModel[].class);

// 如果需要转成List(注意Arrays.asList返回的是不可修改的List)
List<GroupModel> groupList = Arrays.asList(groupArray);
// 要是需要可修改的List,就包装成ArrayList
List<GroupModel> mutableGroupList = new ArrayList<>(Arrays.asList(groupArray));

方法2:直接解析成List(推荐)

因为Java泛型擦除的问题,不能直接传List<GroupModel>.class,需要借助TypeToken来告诉Gson具体的泛型类型:

Gson gson = new Gson();
// 通过TypeToken获取List<GroupModel>的具体类型
Type groupListType = new TypeToken<List<GroupModel>>() {}.getType();
List<GroupModel> groupList = gson.fromJson(yourJsonString, groupListType);

额外注意事项

  • 要是你的JSON不是直接的数组,而是嵌套在一个对象里(比如{"data": [/* 数组内容 */]}),那你得先创建一个包含List的外层类,或者先解析成JsonObject再提取数组部分。
  • 确保GroupModel的字段名和JSON里的键完全匹配,如果不匹配,记得用@SerializedName注解映射,比如JSON里是group_name,类里是groupName,就加@SerializedName("group_name")在字段上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:48:14