我需要将 JSON 字符串转换为 Java 对象。 JSON 将包含一些已知字段和一些未知字段。这是一个例子:
public class MyJsonBean {
private String abc;
private String def;
// getters and setters
}
以及我想要解析的 JSON:
{"abc":"value1","def":"value2","ghi":"value3","jkl":"value4"}
只有固定字段是“abc”和“def”。其他字段是可变的。 我希望 Jackson 解析变量字段并将它们放入 MyJsonBean 类中的列表/映射中。有什么办法可以做到这一点吗?
最佳答案
使用 @JsonAnySetter json反序列化时调用来存储json对象的非成员元素。将值存储在 otherAnnotations 字段中。
Jackson 实际上可以与此类 POJO 一起工作:这是一种方法:
public class MyJsonBean
{
// Two mandatory properties
protected final String abc;
protected final String def;
// and then "other" stuff:
protected Map<String,Object> other = new HashMap<String,Object>();
// Could alternatively add setters, but since these are mandatory
@JsonCreator
public MyJsonBean (@JsonProperty("abc") String abc, @JsonProperty("def") String def)
{
this.abc = abc;
this.def = def;
}
public int getId() { return id; }
public String getName() { return name; }
public Object get(String name) {
return other.get(name);
}
// "any getter" needed for serialization
@JsonAnyGetter
public Map<String,Object> any() {
return other;
}
@JsonAnySetter
public void set(String name, Object value) {
other.put(name, value);
}
}
现在我们已经完成了:很好地序列化和反序列化。
分享并享受...:)
关于java - jackson 与 JSON : map unrecognized fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698528/