jackson Java:如何Map包含点的json键?

uqjltbpv  于 2022-11-09  发布在  Java
关注(0)|答案(1)|浏览(161)

我有一个json,其中一些键包含点。例如:

{
    "key.1" : 10,
    "key.2" : 20,
    "key.3" : 30
}

我计划使用Jackson将其Map到MyClass模型对象中,方法如下:

ObjectMapper mapper = new ObjectMapper();
MyClass obj = mapper.readValue(json, MyClass.class

当然,我不能创建名称中带有点的类成员。
那么,有没有办法克服这种情况呢?
Jackson是首选,但不是强制性的。

js81xvg6

js81xvg61#

只需在字段声明的顶部使用注解@JsonProperty,其名称与字段的名称不同:

@JsonProperty("key.1")
private final int key1;
@JsonProperty("key.2")
private final int key2;
@JsonProperty("key.3")
private final int key3;

一般来说,Jackson将把Json键Map到字段名 *,只有当您没有指定任何其他内容 * 时 *(因此它将通过反射进行)。然而,使用Jackson可以使用字段的注解修改字段的名称(而不仅仅是)。
顺便说一句,您还需要注解构造函数参数,以便将对象从Json反序列化为Java对象:

@JsonCreator
public MyClass(
    @JsonProperty(value = "key.1", required = true) int key1,
    @JsonProperty(value = "key.2", required = true) int key2,
    @JsonProperty(value = "key.3", required = true) int key3) {
    this.key1 = key1;
    this.key2 = key2;
    this.key3 = key3;
}

......然后您就可以做您想做的事情:

MyClass obj = mapper.readValue(json, MyClass.class);

相关问题