【问题标题】:Gson, Jackson, Flaten Map/HashMapGson, Jackson, Flaten Map/HashMap
【发布时间】:2018-07-03 12:31:22
【问题描述】:

假设我有一个 POJO 如下 -

public class Pojo {

    String name;
    String address;
    Map<String, String> values;

    //getter/setters 
}

如果,我使用Jackson将其转换为JSON格式的String,如下-

    Pojo pojo= new Pojo ();
    pojo.setName("My Name");
    pojo.setAddress("Yet not found");

    Map<String, String> map = new HashMap<>();
    map.put("key1", "val1");
    map.put("key2", "val2");
    map.put("key3", "val3");

    pojo.setValues(map);

    ObjectMapper objectMapper = new ObjectMapper();
    String str = objectMapper.writeValueAsString(parentPojo);
    System.out.println(str);

我得到一个String JSON 格式如下 -

{
    "name": "My Name",
    "address": "Yet not found",
    "values": {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3"
    }
}

有什么办法吗,我可以如下使用Gson/Jackson

{
    "name": "ParentName",
    "address": "Yet not found",
    "key1": "val1",
    "key2": "val2",
    "key3": "val3"
}

注意 - 我知道这很容易完成,如果我将所有内容都放在一个单一的 Map 中,但我不能这样做,我有一些其他业务逻辑依赖于这些。

【问题讨论】:

    标签: java json jackson gson jackson2


    【解决方案1】:

    使用 Jackson,用 @JsonAnyGetter 注释 getValues() 和用 @JsonAnySetter 注释 setValues()

    public class Pojo {
    
        private String name;
        private String address;
        private Map<String, String> values;
    
        // Getters and setters for name and address
    
        @JsonAnyGetter
        public Map<String, String> getValues() {
            return values;
        }
    
        @JsonAnySetter
        public void setValues(Map<String, String> values) {
            this.values = values;
        }
    }
    

    【讨论】:

    • 非常感谢,这很愚蠢,但我对这里很陌生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2013-10-29
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多