游乐游手机版
首页/编程语言/文章详情

反序列化时对象展开为列表的实用方法及技巧

时间:2026-07-03 06:48
利用 @JsonValue 注解,Jackson 能够将对象直接“拆解”为内部的列表值,省去一层嵌套,最终生成像 [ [123, 45 6], [789, 12 3] ] 这样的扁平数组。 通常,Jackson 在序列化一个 Java 对象时,默认会将所有字段以键值对形式输出成一个 JSON 对象。
利用 @JsonValue 注解,Jackson 能够将对象直接“拆解”为内部的列表值,省去一层嵌套,最终生成像 [ [123, 45.6], [789, 12.3] ] 这样的扁平数组。

通常,Jackson 在序列化一个 Java 对象时,默认会将所有字段以键值对形式输出成一个 JSON 对象。但在某些场景下,我们并不希望 DataPoint 被包装成 { "dataPoint": [...] } 的结构,而是希望它自身直接等价于内部的二维数值列表——换句话说,每个 DataPoint 实例应当被序列化为一个长度为 2 的数组 [long, double],并作为 dataPoint 数组中的一个元素。

关键在于,解决方案简单得令人惊讶:只需在承载数据的字段(或其 getter 方法)上添加 @JsonValue 注解即可。

public class DataPoint {
    private final List data;

    public DataPoint(long date, double counts) {
        this.data = List.of(date, counts);
    }

    @JsonValue  // ← 核心注解:标记这个方法是对象转 JSON 时的唯一值表示
    public List getData() {
        return data;
    }
}

✅ 需要留意的几个细节: