java - jackson 与 JSON : map unrecognized fields

标签 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 类中的列表/映射中。有什么办法可以做到这一点吗?

最佳答案

使用 @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/

相关文章:

Java 覆盖引用

java - 当 throw new Error() 写在 try block 中时,为什么不执行 catch block 。它只进入最后。后面的代码也没有执行

javascript - 用Js传递Json的值

java - 来自字符串的缓冲图像

java - 如何在 MySQL 中存储来自 Java 代码的 ArrayList?

android - GraphRequest 在尝试获取用户 onCompleted 的 ID 时抛出 NullPointerException?

javascript - jQuery .on( 'click') API 调用问题

java - 使用jackson-mapper解析json文件错误

java - Jackson:如何在不修改 POJO 的情况下向 JSON 添加自定义属性

java - 使用不带注释的@JsonIdentityInfo