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

如何为双层嵌套数组结构的JSON文件构建Java模型

方案1:极简直接映射(无需额外配置)

这个JSON是标准双层数组结构,不需要复杂的自定义配置,直接用嵌套集合接收即可:

  • 类型定义:List<List<BigDecimal>> 或 List<List<Number>>
  • 以Jackson反序列化为例,代码示例:
ObjectMapper objectMapper = new ObjectMapper();
// 直接完成反序列化
List<List<BigDecimal>> data = objectMapper.readValue(jsonStr, new TypeReference<List<List<BigDecimal>>>() {});

缺点是没有字段语义,需要自行对应每个下标的含义:下标0为毫秒级时间戳,下标1为开盘价,下标2为最高价,下标3为最低价,下标4为收盘价。

方案2:结构化POJO映射(可读性高、易维护)

推荐使用该方案,通过Jackson的数组序列化注解直接将子数组映射为有语义的POJO,不需要编写自定义反序列化器:

第一步:定义业务POJO

import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;

// 声明该类序列化/反序列化时采用数组格式,字段顺序与数组元素顺序严格对应
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
public class KlineItem {
    // 对应子数组下标0:毫秒级时间戳
    private Long timestamp;
    // 对应子数组下标1:开盘价
    private BigDecimal open;
    // 对应子数组下标2:最高价
    private BigDecimal high;
    // 对应子数组下标3:最低价
    private BigDecimal low;
    // 对应子数组下标4:收盘价
    private BigDecimal close;

    // 必须保留无参构造方法
    public KlineItem() {}

    // 全参构造、getter、setter方法自行补充即可
}

第二步:反序列化调用

ObjectMapper objectMapper = new ObjectMapper();
List<KlineItem> klineList = objectMapper.readValue(jsonStr, new TypeReference<List<KlineItem>>() {});

注意事项

  • 类上的@JsonFormat(shape = JsonFormat.Shape.ARRAY)注解必须添加
  • POJO的字段顺序必须和JSON子数组的元素顺序完全一致,否则会出现字段值匹配错误
  • 价格类字段推荐用BigDecimal类型,避免Double类型的浮点精度丢失问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:42:02