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

如何使用Gson从嵌套JSON中提取字段生成可按索引访问的对象列表?

具体实现方案

步骤1:修正原有实体类结构

你现有的Bean类中,Data作为内部类需要添加static修饰,否则Gson解析会触发实例化失败异常,修正后代码如下:

public class Bean{
    private List<Data> data;

    public List<Data> getData() {
        return data;
    }

    public static class Data {
        private List<String> urls;
        private String name;
        private String type;
        private String picture;

        public List<String> getUrls() {
            return urls;
        }
        public String getName() {
            return name;
        }
        public String getType() {
            return type;
        }
        public String getPicture() {
            return picture;
        }
    }
}

步骤2:定义自定义存储实体类

新建只包含你需要的name和urls字段的实体类,用于存储提取后的结果:

public class SiteItem {
    private String name;
    private List<String> urls;

    // 全参构造方法,方便快速创建对象
    public SiteItem(String name, List<String> urls) {
        this.name = name;
        this.urls = urls;
    }

    // 提供getter方法方便后续读取字段
    public String getName() {
        return name;
    }
    public List<String> getUrls() {
        return urls;
    }
}

步骤3:完善Parser类的解析转换逻辑

在原有解析代码基础上,增加遍历转换、生成结果列表的逻辑,示例如下:

import com.google.gson.Gson;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

public class Parser {
    private static final String PATH = "try.json";

    public static void main(String[] args) throws Exception {
        // 读取本地JSON文件内容
        String jsonContent = FileUtils.readFileToString(new File(PATH), StandardCharsets.UTF_8);
        // 用Gson解析为Bean对象
        Bean originData = new Gson().fromJson(jsonContent, Bean.class);
        
        // 初始化存储提取结果的新列表
        List<SiteItem> resultList = new ArrayList<>();
        // 遍历原始数据,仅提取需要的字段生成自定义对象存入列表
        for (Bean.Data dataItem : originData.getData()) {
            resultList.add(new SiteItem(dataItem.getName(), dataItem.getUrls()));
        }

        // 测试输出,效果和你要求的一致
        for (SiteItem item : resultList) {
            System.out.println(item.getName());
            for (String url : item.getUrls()) {
                System.out.printf("\"%s\",%n", url);
            }
            System.out.println();
        }

        // 后续可直接通过索引获取对应条目,例如获取第一条数据的名称
        // String firstName = resultList.get(0).getName();
        // String firstUrl = resultList.get(0).getUrls().get(0);
    }
}

运行输出效果

Google
"https://google.com",
"https://googl.com",

Yandex
"https://yandex.ru",

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:30:01