Java: 如何映射包含点的 json 键?

Java: How to map json keys which include dots?

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

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

我打算使用 Jackson 将其映射到 MyClass 模型对象中,方法如下:

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

当然我不能创建 class 名中带点的成员。

那么,有没有办法克服这种情况呢?

杰克逊是首选,但不是强制性的。

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

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

作为一般说明,Jackson 会将 Json 键映射到字段名称 只有在您未指定任何其他内容时 (因此它将通过反射进行). 但是,使用 Jackson 可以修改字段的名称(而不仅仅是)使用它们的注释。

附带说明一下,您还需要注释构造函数参数以将对象从 Json 反序列化为 Java object:

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