Android Java遍历JSON数组无法获取name字段的问题
解决Gson解析JSON数组后无法访问对象字段的问题
我来帮你搞定这个问题!你现在遇到的情况是,Gson把JSON里的对象默认解析成了它内部的LinkedTreeMap实例,但你把数组声明成了Object[],所以遍历的时候只能拿到Object类型的引用,没法直接访问name这类字段。下面给你两种可行的解决办法:
方法一:将对象转为Map<String, Object>访问字段
因为Gson解析JSON对象时默认会生成实现了Map接口的LinkedTreeMap,所以你可以把遍历的itx强制转为Map类型,再通过get()方法获取字段值:
Gson gson = new Gson(); Object[] arr = gson.fromJson(JSON, Object[].class); int length = arr.length; System.out.println("itxcc = " + length); for(Object itx : arr) { // 强制转为Map类型 Map<String, Object> userMap = (Map<String, Object>) itx; // 获取name字段并打印 String userName = (String) userMap.get("name"); System.out.println("用户名:" + userName); }
方法二:创建实体类(推荐方案)
这是更规范、类型安全的做法,先定义一个和JSON结构匹配的User实体类:
public class User { private String name; private String email; // 可以根据JSON返回的字段添加其他属性,比如id、username等 // 记得添加getter方法,也可以用Lombok简化代码 public String getName() { return name; } }
然后直接把JSON解析成User[]数组,遍历的时候就能直接调用getName()方法获取字段:
Gson gson = new Gson(); User[] users = gson.fromJson(JSON, User[].class); int length = users.length; System.out.println("itxcc = " + length); for(User user : users) { System.out.println("用户名:" + user.getName()); }
补充说明:为什么原来的方式不行?
你之前用Object[]接收解析结果,每个元素本质是Gson的LinkedTreeMap,但编译器只识别它是Object类型——Java里Object类并没有name属性,而且Java也不支持itx['name']这种语法。只有把它转成具体的类型(Map或者自定义实体类),才能顺利访问里面的字段。
内容的提问来源于stack exchange,提问作者Hakan Kuru
相关产品推荐
相关产品推荐

