【问题标题】:Jackson: Split a json and populate known and unknown propertiesJackson:拆分 json 并填充已知和未知属性
【发布时间】:2019-05-07 00:01:47
【问题描述】:

我正在编写一个 Spring-boot 服务,我正在使用 jackson ObjectMapper 来处理我的 jsons。

我需要像这样拆分一个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 中的。

有什么想法吗?

【问题讨论】:

  • 填充 MyBean 中的字段后,从对象中删除副本和已知键。然后你可以创建一个 hashmap(others) ,遍历其余属性并获取它们的值。如果其他人需要成为一个对象并且响应的键和值是动态和任意的,那么你应该将它存储为字符串并编码解码需要时提出反对。如果 (others) 是静态的,则创建一个 Object(others) 并将它们添加到其中。

标签: java json spring spring-boot jackson


【解决方案1】:

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

您的 Model 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);
    }

}

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 2017-11-03
    • 2019-12-18
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2018-03-19
    • 2017-10-01
    相关资源
    最近更新 更多