2016-08-08 41 views
0

Ich habe einen String JSON, wie folgt aus:Kann Jackson aus verschiedenen JSON-Strings zum selben Objekt deserialisieren?

{ 
... 
"token": "abc123" 
... 
} 

aus irgendeinem Grund Dann müssen eine neue Struktur aktualisieren, wird die erwartete ankommende JSON-String:

{ 
... 
"token": {"property01":"true", "property02":"false", "value": "abc123"} 
... 
} 

Ursprünglich das Token-Feld War in String-Typ, jetzt wird es ein Objekt mit zusätzlichen Eigenschaften.

Ich muss beide Format für Rückwärtskompatibilität behandeln, kann Jackson diesen Fall behandeln?

+0

Sie können sich wahrscheinlich tun, dass mit einem benutzerdefinierten 'JsonDeserializer'. – Mena

+0

Ja, ich versuche nur, einen Beispielcode von JsonDeserializer für meinen Fall zu finden ... –

Antwort

0

Sie können dies tun, indem Sie Ihre eigenen Deserializer erstellen:

class FooJsonDeserializer extends JsonDeserializer<Foo> { 

    @Override 
    public Foo deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
     Foo foo = new Foo(); 
     //deserialize your data here 
     return foo; 
    } 
} 

Und vergessen Sie nicht die Deserializer Ihrer Klasse

@JsonDeserialize(using = FooJsonDeserializer.class) 
class Foo { 
    ... 
} 
+0

Ich würde wirklich gerne wissen, warum ich ein Minus für meine Antwort bekomme. Es wäre sehr hilfreich zu wissen, was damit nicht stimmt. – kaba713

+0

Das verdient keine Down-Abstimmung. Gegenstimmen, um dem entgegenzuwirken. –

0

Sie token Setter mit Anmerkungen versehen kann hinzufügen mit @JsonDeserialize(using=YourCustomDeserializer.class) und Logik zur Verfügung stellen nur für eine Feld-Deserialisierung.