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

使用Simple JSON库从JSON文件取值并映射至Java类对象

实现JSON数据到Java对象的映射并存入ArrayList

核心问题说明

你当前测试代码的错误在于:JSON顶层对象的键是字符串类型的"1""2""3",并非数字索引,所以调用jsonObject.get(0)会返回null。另外json-simple属于轻量JSON解析库,本身没有自动对象映射能力,需要手动解析,或者换用更便捷的Jackson库实现自动映射。


步骤1:定义Java实体类

先创建与JSON子结构对应的实体类,用来存储单条数据:

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty; // 仅Jackson方案需要

public class StreamItem {
    private List<String> path;
    // JSON里的键是"Des",和属性名des不匹配,用@JsonProperty指定映射关系
    @JsonProperty("Des")
    private List<String> des;

    // 无参构造器(Jackson等库必须)
    public StreamItem() {}

    // 全参构造器
    public StreamItem(List<String> path, List<String> des) {
        this.path = path;
        this.des = des;
    }

    // Getter和Setter方法
    public List<String> getPath() {
        return path;
    }

    public void setPath(List<String> path) {
        this.path = path;
    }

    public List<String> getDes() {
        return des;
    }

    public void setDes(List<String> des) {
        this.des = des;
    }

    // 重写toString方便查看结果
    @Override
    public String toString() {
        return "StreamItem{" +
                "path=" + path +
                ", des=" + des +
                '}';
    }
}

方案一:用json-simple手动解析

手动遍历JSON键值对,将数据封装到实体类并加入ArrayList:

import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class JsonSimpleParseDemo {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        List<StreamItem> itemList = new ArrayList<>();

        try {
            // 读取并解析JSON文件
            Object obj = parser.parse(new FileReader("C:/Users/dell/Desktop/streams.json"));
            JSONObject rootObj = (JSONObject) obj;

            // 获取顶层对象的所有键("1""2""3")
            Set<String> keys = rootObj.keySet();
            for (String key : keys) {
                // 获取每个子对象
                JSONObject itemJson = (JSONObject) rootObj.get(key);
                
                // 解析path数组
                JSONArray pathArray = (JSONArray) itemJson.get("path");
                List<String> path = new ArrayList<>();
                for (Object elem : pathArray) {
                    path.add((String) elem);
                }

                // 解析Des数组
                JSONArray desArray = (JSONArray) itemJson.get("Des");
                List<String> des = new ArrayList<>();
                for (Object elem : desArray) {
                    des.add((String) elem);
                }

                // 创建实体类对象并加入集合
                itemList.add(new StreamItem(path, des));
            }

            // 打印验证结果
            for (StreamItem item : itemList) {
                System.out.println(item);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方案二:用Jackson实现自动映射(更简洁高效)

Jackson是主流JSON处理库,能自动完成JSON到Java对象的映射,无需手动解析数组和键值对。

第一步:引入Jackson依赖

如果用Maven,在pom.xml中添加:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 使用最新稳定版本即可 -->
</dependency>

第二步:编写解析代码

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.ArrayList;
import java.util.Map;

public class JacksonParseDemo {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        List<StreamItem> itemList = new ArrayList<>();

        try {
            // 将JSON解析为Map<String, StreamItem>,再把Map的值转为ArrayList
            Map<String, StreamItem> itemMap = mapper.readValue(
                    new File("C:/Users/dell/Desktop/streams.json"),
                    mapper.getTypeFactory().constructMapType(Map.class, String.class, StreamItem.class)
            );
            itemList.addAll(itemMap.values());

            // 打印验证结果
            for (StreamItem item : itemList) {
                System.out.println(item);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:33:24