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

如何使用Gson解析JSON?遇JsonSyntaxException异常求助

解决Gson解析时的Expected BEGIN_OBJECT but was BEGIN_ARRAY错误

嘿,这个报错我太常见了!咱们先把问题拆解清楚:

你看到的com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY,本质是你让Gson去解析一个JSON对象(用{}包裹的结构),但实际传入的是一个JSON数组(用[]包裹的结构),两者结构不匹配所以抛出了错误。

下面给你两种最常见的解决方案,对应不同的JSON结构:

情况1:你的JSON本身就是一个数组

比如你的JSON长这样:

[{"name":"张三","age":28},{"name":"李四","age":30}]

这时候你不能直接把它解析成单个Java对象,而是要解析成数组或者集合:

方式1:解析成对象数组

假设你的Java实体类是User:

public class User {
    private String name;
    private int age;
    
    // 生成getter、setter、构造方法
}

解析代码:

String json = "[{\"name\":\"张三\",\"age\":28},{\"name\":\"李四\",\"age\":30}]";
Gson gson = new Gson();

// 直接解析成User数组
User[] userArray = gson.fromJson(json, User[].class);

方式2:解析成List集合

如果更习惯用List操作,可以借助TypeToken来指定泛型类型:

List<User> userList = gson.fromJson(json, new TypeToken<List<User>>(){}.getType());

情况2:你的JSON是外层对象包裹数组

比如你的JSON长这样:

{
  "code": 200,
  "message": "成功",
  "data": [{"name":"张三","age":28},{"name":"李四","age":30}]
}

这时候你需要先创建一个对应外层结构的Java类,比如UserResponse:

public class UserResponse {
    private int code;
    private String message;
    private List<User> data;
    
    // 生成getter、setter、构造方法
}

然后直接解析成这个外层类即可:

UserResponse response = gson.fromJson(json, UserResponse.class);
// 之后可以通过response.getData()拿到数组对应的集合

最后提醒你:一定要确保Java类的字段名和JSON的键名一致(或者用@SerializedName注解映射不同的名字),不然Gson也会解析失败哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:30:45