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

