我在项目中使用REST模板消耗REST Web服务,该模板返回如下的JSON:
{"data": [{
"id": "INT-1468819244684-event-no-97",
"object1": {
"JSONString": "{\"object2\":[{\"object3\":\"value3\",\"object4\":\"value4\"}]}"
}
}]
}
在使用上述JSON响应时,我能够创建一个bean类,并能够将JSON对象/值转储到同一个中。
但问题是json响应上面包含如下字符串:
"JSONString": "{\"object2\":[{\"object3\":\"value3\",\"object4\":\"value4\"}]}"
实际上是一个json。所以我有一个bean,我可以在其中获取JSONString作为String。所以目前我可以使用下面的bean结构来获取对象中的响应:
public class response {
Data data;
}
public class Data {
String id;
Object1 object1;
}
public class Object1 {
String jsonString;
}
但是jsonString上面包含一个json形式的字符串,所以我想在运行时以某种方式将这个JSON String转换为JSON Object,只有在创建其他对象时才将其所有内容转储到同一个bean中,以便应用程序应该是准备好使用它的内容。理想情况下,我的bean层次结构应该如下所示:
public class response {
Data data;
}
public class Data {
String id;
Object1 object1;
}
public class Object1 {
JSONString jsonString;
}
public class JSONString {
Object2 object2;
}
public class Object2 {
String object3;
String object4;
}
请指导我如何做同样的事。
答案 0 :(得分:3)
你可以用这种方式使用Jackson的ObjectMapper.readValue:
// Create or use your existing ObjectMapper
ObjectMapper om = new ObjectMapper();
@JsonProperty("JSONString")
public String getJSONString() {
if (this.jsonString == null)
return null;
return om.writeValueAsString(this.jsonString);
}
public void setJSONString(String s) {
this.jsonString = om.readValue(s, JSONString.class);
}