gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:49 24 4
gpt4 key购买 nike

我正在尝试以某种方式解码 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com