使用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
相关产品推荐
相关产品推荐

