我需要将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类中的列表/映射中。有没有办法做到这一点?
答案 0 :(得分:1)
使用由json反序列化调用的 @JsonAnySetter 来存储json对象的非成员元素。将值存储在otherAnnotations字段中。
杰克逊实际上可以与这样的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);
}
}
我们有它:很好地序列化和反序列化。
分享并享受......:)