在字段上使用杰克逊注释作为反序列化的根

时间:2018-11-13 07:07:04

标签: java json jackson annotations

我有一个要反序列化的类:

@Data
public class Config {

    private Map<String, Item> items;
}

@Data
public class Item {

    private String a;
    private String b;
    private String c;
}

JSON字符串:

{
  "item1": {
    "a": "1",
    "b": "2",
    "c": "3"
  },
  "item2": {
    "a": "10",
    "b": "20",
    "c": "30"
  },
  "item3": {
    "a": "5",
    "b": "6",
    "c": "7"
  }
}

我应该使用什么将JSON字符串反序列化为Config?

编辑:向JSON添加了更多项目

2 个答案:

答案 0 :(得分:0)

更新

使用JsonAlias在单个属性中获取多个值:

@JsonAlias({"item1", "item2", "item3"})
private Map<String, Item> items;
  

可用于为属性定义一个或多个备用名称的注释

旧问题的较旧答案

添加名称为item1的{​​{3}}

@Data
public class Config {
    @JsonProperty("item1")
    private Map<String, Item> items;
}
  

标记注释,可用于将非静态方法定义为逻辑属性(取决于其签名)或要使用的非静态对象字段(序列化,反序列化)的“设置者”或“获取者”作为逻辑属性。

编辑

在@michaeak评论后更新为Map

答案 1 :(得分:0)

一个同事帮助我回答了我的问题:

@Data
public class Config {

    private Map<String, Item> items;

    @JsonAnyGetter
    public Map<String, Item> getItems() {
       return items;
    }

    @JsonAnySetter
    public void setItem(final String key, final Item value) {
       items.put(key, value);
    }
}

@Data
public class Item {

    private String a;
    private String b;
    private String c;
}