杰克逊:拆分JSON并填充已知和未知属性

时间:2018-12-05 12:06:16

标签: java json spring spring-boot jackson

我正在编码Spring-boot服务,并且正在使用jackson ObjectMapper来处理json。

我需要像这样分割一个json:

{
  "copy": {
    "mode": "mode",
    "version": "version"
  },
  "known": "string value",
  "unknown": {
   "field1": "sdf",
   "field2": "sdfdf"
  },
  "unknown2": "sdfdf"
}

我的意思是,我的豆子是这样的:

public class MyBean {

    private CopyMetadata copy;
    private String known;
    private Object others;

}

我想将已知字段填充到MyBean属性中,并将其他未知属性移到MyBean.others属性中。

已知属性放置在MyBean内的字段中。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

此问题的可能解决方案是使用杰克逊注释@JsonAnyGetter and @JsonAnySetter

您的模型Mybean.class应该看起来像这样,并且应该可以工作

import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;

public class MyBean {

    private CopyMetadata copy;
    private String known;
    private Map<String, Object> others = new HashMap<>();

    public CopyMetadata getCopy() {
        return copy;
    }

    public void setCopy(CopyMetadata copy) {
        this.copy = copy;
    }

    public String getKnown() {
        return known;
    }

    public void setKnown(String known) {
        this.known = known;
    }

    public Map<String, Object> getOthers() {
        return others;
    }

    public void setOthers(Map<String, Object> others) {
        this.others = others;
    }

    @JsonAnyGetter
    public Map<String, Object> getUnknownFields() {
        return others;
    }

    @JsonAnySetter
    public void setUnknownFields(String name, Object value) {
        others.put(name, value);
    }

}