【问题标题】:Jackson parsing object of many probabilities but same property name杰克逊解析许多概率但属性名称相同的对象
【发布时间】:2016-04-26 15:46:36
【问题描述】:

我在我的 Android 项目中使用 Jackson 库来解析 json 响应。

在我的例子中,返回的 json 数组由不同结构的对象组成。我已经创建了 3 个 VO 课程,但我想知道是否可以告诉 jackson 一个一个尝试,直到成功为止。

以下方法可以解决问题,但禁止使用,同样@JsonProperty但有多种可能性:

@JsonProperty("Object")
public Class1 object1;
@JsonProperty("Object")
public Class2 object2;
@JsonProperty("Object")
public Class3 object3;

还有其他选择吗?

【问题讨论】:

    标签: java android json jackson


    【解决方案1】:

    我建议编写一个自定义反序列化器。你可以在这里找到相关信息:http://www.baeldung.com/jackson-deserialization

    官方文档在这里:http://wiki.fasterxml.com/JacksonHowToCustomDeserializers

    替代方案

    如果这3个对象通过实现一个通用接口相互关联,你可以这样做:

    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
    public interface MyObjectInterface {}
    

    但是您需要调整 JSON 以包含 @class 属性。你没有说明这是否可能。

    备选方案 2

    如果您已经拥有type 属性,您可以这样做:

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
    @JsonSubTypes(
        {@JsonSubTypes.Type(value = MyObject1.class, name = "OBJECT_1"),
                @JsonSubTypes.Type(value = MyObject2.class, name = "OBJECT_2"),
                @JsonSubTypes.Type(value = MyObject3.class, name = "OBJECT_3")}
    )
    public interface MyObjectInterface {}
    

    【讨论】:

    • 我的匿名对象旁边有一个名为type 的标志,它决定对象的类型。有帮助吗?
    • 是的,我已经更新了答案以展示您如何做到这一点。
    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多