我可以将 jackson-mapped @JsonProperties 推到“顶级”吗?

Bri*_*ent 5 java json jackson

给定一个 Java 类,如下所示:

class MyClass {

    String value;

    Map<String,Object> map;

    @JsonProperty("value")
    public String getValue() {
        return value;
    }

    @JsonProperty("map")
    public Map<String,Object> getMap {
        return map;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jackson 将像这样转换为 JSON:

{
    "value": "abc",
    "map": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }

}
Run Code Online (Sandbox Code Playgroud)

我想要的是以map某种方式“展平”属性,使其内容出现在 JSON 结构的“顶级”,如下所示:

{
    "value": "abc",
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}
Run Code Online (Sandbox Code Playgroud)

这是否可以通过 Jackson 注释的任何组合声明性地实现?

(这是我实际问题的简化,所以我不是在寻找诸如“编写自己的自定义 MyClass 序列化程序”之类的答案。实际上,此类必须在我无法直接控制的场景中使用自定义 ObjectMappers。)

小智 5

你可以尝试@JsonUnwrapped

根据链接,这应该去除一层包装。

(Jackson 1.9+) @JsonUnwrapped (property; ie method, field) 用此注释标记的属性将被“解包”,也就是说,通常作为子 JSON 对象的属性写入的属性将被添加为包含 JSON 对象。