我有以下json回复:
{
"Labels": {
"com.prop.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
}
}
现在我想在我的java类中处理这些值。我遇到的问题是像 com.example.version 这样的字段,使用与数据类型相同的方式生成pojo。像,
private String com.example.version
这给了我编译时错误。 所以,我想创建一个字段" String版本"它指向" com.example.version" 我尝试过使用@JsonProperty和@JsonSetter。
Labels.java
public class Labels
{
@JsonProperty("com.example.version")
private String version;
@JsonProperty("com.example.vendor")
private String vendor;
@JsonProperty("com.example.license")
private String license;
public String getVersion()
{
return version;
}
public void setVersion(String version)
{
this.version = version;
}
public String getVendor()
{
return vendor;
}
public void setVendor(String vendor)
{
this.vendor = vendor;
}
public String getLicense()
{
return license;
}
public void setLicense(String license)
{
this.license = license;
}
@Override
public String toString()
{
return "ClassPojo [com.example.version = " + version + ", com.example.vendor = " + vendor + ", com.example.license = "
+ license + "]";
}
}
但每次我收到此错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Labels" (class com.csc.agility.adapters.service.docker.pojo.Labels), not marked as ignorable (3 known properties: "com.example.license", "com.example.vendor", "com.example.version"])
at [Source: {
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
}
}; line: 2, column: 12] (through reference chain: com.csc.agility.adapters.service.docker.pojo.Labels["Labels"])
我如何使用它:
ObjectMapper objMap = new ObjectMapper();
String jsonInString =
"{\n\"Labels\": {\n \"com.example.vendor\": \"Acme\",\n \"com.example.license\": \"GPL\",\n \"com.example.version\": \"1.0\"\n }\n}";
Label label = objMap.readValue(jsonInString, Label.class);
String licence = label.getLicense();
有人能指出我使用正确的json注释或以任何其他方式实现它吗?
答案 0 :(得分:2)
您应该使用
配置mapper
mapper.configure(Feature.UNWRAP_ROOT_VALUE, true);
(版本1.9)
或
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
(适用于版本2及更高版本)。
我已尝试过具有上述属性的json,一切正常:
String data = "{\"Labels\": {\"com.example.vendor\": \"Acme\",\"com.example.license\": \"GPL\",\"com.example.version\": \"1.0\"}}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
Labels labels = mapper.readValue(data, Labels.class);
System.out.println(labels);
注意:在Json字符串中,我已将com.prop.vendor
更改为com.example.vendor
以使其可用。
答案 1 :(得分:0)
还有一个像下面这样的pojo并使用此对象而不是标签来序列化/反序列化 -
public class Response {
@JsonProperty("Labels")
private Labels labels;
//setter
//getter
}
在您的代码中使用此 -
Response response = objMap.readValue(jsonInString, Response.class);
String licence = response.getLabels().getLicense();