JACKSON with JSON:映射无法识别的字段

时间:2016-04-18 15:38:42

标签: java json jackson

我需要将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类中的列表/映射中。有没有办法做到这一点?

1 个答案:

答案 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);
    }
}

我们有它:很好地序列化和反序列化。

分享并享受......:)