我需要解析json,看起来像这样
{
"ReturnedObject": {object_of_various_type},
"Status": "Some string",
"Success": true,
"Message": "some string"
}
其中ReturnedObject可以是各种类型的对象。 Usualy我使用Faster XML映射到对象,我也想使用这个库。
ReturnedObject是各种类型的对象。我知道这个对象的类型,但我不知道如何告诉FasterXML库,返回对象是这种类型,它应该将它映射到它。
我尝试使ResponseObject具有通用性,但我不知道如何或者是否可以使用此通用参数传递.class
。
我不确定,如果我可以在json中获得所有类型的多个字段的课程,因为我不知道如何告诉FasterXML ReturnedObject的类型。
我想避免为每个包含我的Object的ReturnedObject创建类。
感谢您的建议和时间。
修改
我找到了解决方案
对于任何寻找完整示例的人来说,就是这样。
解析方法,其中Class<T> clazz
是泛型类的类,ResponseObject.class
是整个json的类(json的例子是up)
public static <T> ResponseObject<T> parse(String json, Class<T> clazz) {
initialize();
JsonParser jp;
ResponseObject<T> obj = null;
try {
jp = jsonFactory.createParser(json);
// THIS IS IMPORTANT PART FOR MAPPING
JavaType type = objectMapper.getTypeFactory().constructParametricType(ResponseObject.class, clazz);
obj = objectMapper.readValue(json, type);
//
} catch (JsonParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}
ResponseObject类看起来像这样
@JsonIgnoreProperties(ignoreUnknown=true)
public class ResponseObject<T> {
String status;
boolean success;
String message;
T returnedObject;
/**
* get and set methods for status, success, message
*/
public T getReturnedObject() {
return returnedObject;
}
@JsonProperty("ReturnedObject")
public void setReturnedObject(T retudnedObject) {
this.returnedObject = retudnedObject;
}
}