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

Android中如何将字符串反序列化为对象?附具体JSON数组及尝试代码

在Android中用Gson反序列化JSON数组为对象列表的正确姿势

嘿,问题出在你要反序列化的JSON是一个数组格式(开头[结尾]),但你却尝试把它直接转成单个Example对象啦!这就好比你拿个装了一堆苹果的袋子,却想直接把它当成一个苹果来用,肯定会抛出JsonSyntaxException的。

下面给你两种靠谱的解决方案,先确保你的Example类是正确的:

第一步:确认你的Example类结构

首先,Example类的字段要和JSON里的键严格匹配,并且必须要有无参构造函数(Gson反射创建对象需要):

public class Example {
    // 字段名和JSON里的键完全一致,大小写也不能错
    private String company;
    private String AvgSal;

    // 必须的无参构造函数
    public Example() {}

    // Getter和Setter方法,方便后续获取数据
    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getAvgSal() {
        return AvgSal;
    }

    public void setAvgSal(String avgSal) {
        AvgSal = avgSal;
    }
}

如果你的类字段名和JSON键不一致(比如类里用avgSal而JSON是AvgSal),可以用@SerializedName注解映射:

@SerializedName("AvgSal")
private String avgSal;

第二步:选择合适的反序列化方式

方式一:反序列化为List<Example>

因为Java泛型擦除的问题,直接传List.class不行,需要用TypeToken来获取泛型的真实类型:

String json = ls.get(j).getCwc();
Gson gson = new Gson();
// 获取List<Example>的Type类型
Type exampleListType = new TypeToken<List<Example>>() {}.getType();
List<Example> exampleList = gson.fromJson(json, exampleListType);

方式二:反序列化为Example[]数组

这种方式更简单,不需要处理泛型擦除,之后可以按需转成List:

String json = ls.get(j).getCwc();
Gson gson = new Gson();
Example[] exampleArray = gson.fromJson(json, Example[].class);

// 转成可修改的List(Arrays.asList返回的是固定大小的列表)
List<Example> exampleList = new ArrayList<>(Arrays.asList(exampleArray));

常见坑提醒

  • 千万别再用fromJson(json, Example.class)处理数组JSON了,这是你当前问题的核心
  • 确保Example类的无参构造函数存在,否则Gson无法创建实例
  • 字段名和JSON键的大小写要一致,或者用@SerializedName做映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:00:41