首页 > 解决方案 > Jackson - 为 Map 键包含 JsonTypeInfo

问题描述

在 Java 中,我需要序列化一个为Map<Object, Object>. 我想在生成的 Json 中包含一个类类型信息,我可以通过@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS). 但是,类型信息仅包含在映射值中,而不包含在键中。

例如:

@Data
public class FunnyObject {

    @JsonProperty(value = "fields")
    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
    private Map<Object, Object> fields = new HashMap<>();
}

初始化:

Map<Object, Object> fields = new HashMap<>();
fields.put("Date", new Date());
fields.put(new Date(), "ups");
fields.put(MyTypes.TYPE_B, "Reversed");

FunnyObject funnyObject = new FunnyObject();
funnyObject.setFields(fields);

MyTypes 枚举:

public enum MyTypes {
    TYPE_A("hello"),
    TYPE_B("World");

    private String txt;

    MyTypes(String txt) {
        this.txt = txt;
    }
}

生成的 Json 是这样的,其中仅包含值的类类型信息。Howe 我也可以将它包含在 Key 中?

{
    "fields": {
        "2021-01-25T13:28:18.718+00:00": "ups",
        "TYPE_B": "Reversed",
        "Date": [
            "java.util.Date",
            1611581298718
        ]
    }
}

标签: javajsonjackson

解决方案


我猜 Michał Ziober 在我原来的帖子的评论中回答了这个问题

“JSON 密钥始终是一个字符串”


推荐阅读