2016-04-26 2 views
0

Ich benutze Jackson Bibliothek in meinem Android-Projekt für die Analyse von JSON-Antworten.Jackson Parsing-Objekt mit vielen Wahrscheinlichkeiten, aber gleiche Eigenschaft Name

In meinem Fall besteht das zurückgegebene JSON-Array aus Objekten unterschiedlicher Struktur. Ich habe 3 VO-Klassen erstellt, aber ich frage mich, ob es möglich ist, Jackson zu sagen, dass er sie bis zum Erfolg ausprobieren soll.

Im Folgenden konnte das Problem lösen, aber es ist verboten, die gleichen @JsonProperty aber viele Möglichkeiten:

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

Alternativen?

Antwort

2

Ich würde vorschlagen, einen benutzerdefinierten Deserializer zu schreiben. Sie können Informationen über das hier finden: http://www.baeldung.com/jackson-deserialization

Offizielle Dokumente sind hier: http://wiki.fasterxml.com/JacksonHowToCustomDeserializers

Alternative:

Wenn die drei Objekte miteinander verbunden sind durch eine gemeinsame Schnittstelle implementieren, können Sie dies tun :

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

Aber dann müssen Sie die JSON gehören die @class Eigenschaft einzustellen. Du hast nicht gesagt, ob das möglich ist oder nicht.

Alternative 2:

Wenn Sie bereits ein type Eigenschaft haben, können Sie dies tun:

@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

ich eine Flagge mit dem Namen 'Baumuster zur neben meinem anonymen Objekt, es entscheidet, was der Typ Objekt ist. Kann es helfen? –

+0

Ja, ich habe die Antwort aktualisiert, um zu zeigen, wie Sie es tun können. –