【问题标题】:Serialize Map<String,Object> to Json and back将 Map<String,Object> 序列化为 Json 并返回
【发布时间】:2025-12-16 03:30:01
【问题描述】:

我想用 Jackson 将 Map&lt;String,Object&gt; 序列化为 JSON 并返回。对象类型可以是多个 bean。但是当序列化回来时,我认为杰克逊不知道对象有什么类型。因此将其序列化为LinkedHashMap。是否可以添加对象的类型信息?

这是我的示例程序:

TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {};

        ObjectMapper m  = new ObjectMapper();
        JsonFactory  jf = new JsonFactory();

        Map<String, Object> map = new HashMap<String, Object>();

        UserBean bean1 = new UserBean();

        bean1.setId("1");
        bean1.setName("test");

        map.put("user", bean1);

        String test = m.writeValueAsString(map);

        map = m.readValue(test, typeRef);

        for (final Map.Entry<String, Object> entry : map.entrySet())
        {
            final String key = entry.getKey();

             if (key.matches("user"))
             {
                final UserBean userBean = (UserBean)map.get(key);
             }
        }

public class UserBean {
    String id;
    String name;

     public UserBean()
     {
         super();
     }

     public void setId(String id){
         this.id = id;
     }

     public String getId(){
         return this.id;
     }

     public void setName(String name){
         this.name = name;
     }

     public String getName(){
         return this.name;
     }
}

【问题讨论】:

    标签: java json serialization jackson


    【解决方案1】:

    尝试如下图;

    Map<String, UserBean> map = new HashMap<String, UserBean>();
    

    (如果 Java 7 可以使用菱形运算符而无需指定类型,例如 new HashMap())。

    您也可以尝试使用@JsonDeserialize 使用jackson-annotations

    【讨论】:

    • 感谢您的回答,但该对象也可以是不同于 UserBean 的其他类型(例如 AppBean)。然后杰克逊不知道该对象具有哪种类型。因此,如果密钥是“App”,那么我想将其转换为 AppBean。
    最近更新 更多