java - 使用 Jackson ObjectMapper 将 Json 的一部分转换为 HashMap

标签 java json jackson unmarshalling object-object-mapping

我正在尝试以某种方式解码 json 文件,以便将 Json 的几个属性映射到我的模型类中存在的 HashMap 中。其余属性映射到类的各个字段。请找到下面的 Json:

{
         "_id":2,
         "Name":"xyz",
         "Age":20,
         "MEMO_TEXT":"yyy",
         "MEMO_LINK":"zzz",
         "MEMO_DOB":"",
         "MEMO_USERNAME":"linie orange",
         "MEMO_CATEGORY":2,
         "MEMO_UID":"B82071415B07495F9DD02C152E4805EC"
      }

这是我要将此 Json 映射到的模型类:

public class Model{

    private int                              _id;
    private String                           name;
    private int                              age
    private HashMap<String, String> columns;

    //Getters and Setter methods
}

所以在这里,我想要的是获取包含键 "MEMO_TEXT","MEMO_LINK","MEMO_DOB","MEMO_USERNAME","MEMO_CATEGORY","MEMO_UID"的 map "

Json 中的其余属性映射到它们各自的字段。

是否可以使用 Jackson 库的 ObjectMapper 来做到这一点?

最佳答案

您可以使用@JsonAnySetter 注释要为“其他”属性调用的方法:

@Test
public void partial_binding() throws Exception {
    Model model = mapper.readValue(Resources.getResource("partial_binding.json"), Model.class);
    assertThat(model.name, equalTo("xyz"));
    assertThat(model.columns, hasEntry("MEMO_TEXT", "yyy"));
    assertThat(
            mapper.writeValueAsString(model),
            json(jsonObject()
                 .withProperty("Name", "xyz")
                 .withProperty("MEMO_TEXT", "yyy")
                 .withAnyOtherProperties()));
}

public static class Model {
    @JsonProperty
    private int _id;
    @JsonProperty("Name")
    private String name;
    @JsonProperty("Age")
    private int age;
    private HashMap<String, String> columns;

    @JsonAnyGetter
    public HashMap<String, String> getColumns() {
        return columns;
    }

    public void setColumns(HashMap<String, String> columns) {
        this.columns = columns;
    }

    @JsonAnySetter
    public void putColumn(String key, String value) {
        if (columns == null) columns = new HashMap<>();
        columns.put(key, value);
    }
}

此外,@JsonAnyGetter 做“有点相反”,所以这应该以相同的方式序列化和反序列化。

关于java - 使用 Jackson ObjectMapper 将 Json 的一部分转换为 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30101444/

相关文章:

java - 在 GUI 中使用预定义的字符串

c# - 如何在 JSON.NET 中组合/合并两个 JArray

javascript - 单击列表项后显示子列表

java - Jackson - 在没有注释的情况下在运行时修改属性

java - 反序列化字符串缓冲区

java - 扫描仪 next() 输入不匹配异常 ..在 nextInt() 之后使用 nextLine()

java - 安全地为 Multi-Tenancy 数据库创建新模式

javascript - JQuery 将 json 解释为脚本?

java - jackson jboss eap6.1.1 注释不起作用

java - jackson 无法使用最终字段反序列化最简单的对象