Java Jackson序列化一个对象中的键和值

Java Jackson序列化一个对象中的键和值,java,jackson,Java,Jackson,我试图创建一个自定义序列化程序来生成Pair对象,但我希望在序列化对象时避免使用键和值字段 对象pojo: public class TypeObjectPair implements Serializable { private final String canonicalObjectName; private final Object object; public String getKey() { return canonicalObject

我试图创建一个自定义序列化程序来生成Pair对象,但我希望在序列化对象时避免使用键和值字段

对象pojo:

public class TypeObjectPair implements Serializable {


    private final String canonicalObjectName;
    private final Object object;


    public String getKey() {
        return canonicalObjectName;
    }

    public Object getValue() {
        return object;
    }


}
个人类。理论上可以是任何其他对象类

class Person{
    int id;
    String name;
}
要序列化的最终对象:

TypeObjectPair obj = new TypeObjectPair("com.example.Person", new Person(1, "Peter"));
所需输出:

{
    "com.example.object" : {
                              "id" : 1,
                              "name" : "Peter"    
                           }
}
关于如何实现它有什么想法吗

您可以使用带有以下内容的地图:

公共类TypeObjectPair{ 私有映射数据=新HashMap; 公共类型ObjectPairString键,对象值{ data.putkey、value; } @JsonAnyGetter 公共地图获取数据{ 返回数据; } } 然后按如下方式使用:

ObjectMapper mapper=新的ObjectMapper; typeobjectpairpair=new-TypeObjectPaircom.example.object,new-Person1,Peter; 字符串json=mapper.writer.withDefaultPrettyPrinter.WriteValueAsTringPair; 输出将是:

{ com.example.object:{ id:1, 姓名:彼得 } }
输入是什么?做一个简单的谷歌搜索怎么样@jbx,我在谷歌上搜索了一下,但没有结果,即使是你发送的链接也没有演示如何实现它。@WildGoat那么你的问题并不是很清楚你想要实现什么。您提到一对,这意味着您的对象只有一个键和一个值,但您所需的输出显示了一个具有多个键和值的对象。您是如何想象它神奇地适合您的一对的还不是很清楚。@jbx,它可以是里面的任何对象。例如一个人。请参阅更新的回答什么版本的jackson提供了此输出?因为对我来说,它在序列化映射时仍然输出值和键。有什么办法可以避免吗?@WildGoat我正在使用Jackson 2.9,并用答案中的代码进行测试。除了getData,我不使用任何getter。如果您还有其他getter,请用@JsonIgnore.Thance注释它们!你是对的,我刚刚忘记删除getter。