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);
我有一个 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);