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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:06:15