使用FasterXML

时间:2015-11-05 18:59:05

标签: java json fasterxml

我需要解析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;
    }

}

0 个答案:

没有答案