java - Gson、Jackson、Flaten Map/HashMap

标签 java json jackson gson jackson2

假设我有一个 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);

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

{
    "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 中,这可以轻松完成,但我不能这样做,我还有一些依赖于这些的其他业务逻辑。

最佳答案

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

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;
    }
}

关于java - Gson、Jackson、Flaten Map/HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51154723/

相关文章:

json - Golang net/http 请求 Body 总是空的

java - 某些字段的 jackson JSON 自定义序列化

java - 有条件地将元素渲染为链接以在 Java 中实现 HAL

java - 如何在 Spring 应用程序中检索 InMemoryUserDetailsManager 实例?

java - 使用 GET 调用带有数组参数的 JAX-WS Web 服务

java - 如何使用 Gson 获取 JSON 元素类型?

java - 将 JAVA 对象反序列化为具有关系的 JSON

java - 同步改进以按特定顺序实现多线程完成

java - 使用 GridBagLayout 在 JTextArea 中添加 JScrollPane

java - 解析 JSON 数组 BEGIN_ARRAY 但为 NAME