2016-04-26 6 views
0

私はAndroidプロジェクトでjsonの応答を解析するためにJacksonライブラリを使用しています。多くの可能性があるが、同じプロパティ名を持つJacksonオブジェクトを解析する

私の場合、返されたjson配列はそれぞれ異なる構造のオブジェクトで構成されています。私は3つのVOクラスを作りましたが、成功するまでジャクソンにそれを試してもらうことが可能かどうか疑問です。次

は、この問題を解決することができ、それは禁じられています、同じ@JsonPropertyしかし、多くの可能性:

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

任意の代替?

答えて

2

カスタムデシリアライザを作成することをお勧めします。あなたはここでその上の情報を見つけることができます: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 {} 

しかし、その後、あなたは@classプロパティを含めるようにJSONを調整する必要があります。あなたはそれが可能かどうかを述べなかった。

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 {} 
+0

を私は匿名オブジェクトの横に 'type'が呼ばれる旗を持って、それがタイプかを決定しますオブジェクトはです。それは助けることができますか? –

+0

はい、私はあなたがそれを行う方法を示す答えを更新しました。 –

関連する問題