Java – jackson: Splits a JSON and populates known and unknown properties

jackson: Splits a JSON and populates known and unknown properties… here is a solution to the problem.

jackson: Splits a JSON and populates known and unknown properties

I’m writing a Spring-boot service, and I’m using jackson ObjectMapper to handle my json.

I need to split a json:: like this

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

I mean, my bean looks like this:

public class MyBean {

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

}

I want to populate known fields into MyBean properties and move other unknown properties into MyBean.others properties.

Well-known properties are placed as fields in MyBeans.

Any ideas?

Solution

One possible solution to this problem is to use jackson annotations @JsonAnyGetter and @JsonAnySetter

Your model Mybean.class should look like this and it should work

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

}

Related Problems and Solutions