Deserialize ArrayList aus String mit Jackson ACCEPT_SINGLE_VALUE_AS_ARRAY

9

Problem Deserialisieren des Arrays als String mit Jackson 2

Dies ist ein ähnliches Problem mit Deserialize ArrayList aus String mit Jackson

Der eingehende JSON (den ich nicht kontrollieren kann) hat ein Element 'thelist', das ein Array ist. Manchmal wird dies jedoch als leere Zeichenfolge anstelle eines Arrays angezeigt:

z. anstelle von "thelist": []
es kommt als "thelist": ""

Ich habe Probleme, beide Fälle zu analysieren.

Die Datei 'sample.json' , die einwandfrei funktioniert:

%Vor%

Die Klassen:

%Vor%

Der Code, der funktioniert:

%Vor%

Wenn der JSON jedoch eine leere Zeichenfolge anstelle eines Arrays erhält, d. "thelist": ""
Ich bekomme diesen Fehler:

%Vor%

Wenn ich diese Zeile (die für Ryan funktioniert) in Deserialize ArrayList hinzufüge von String mit Jackson und scheinbar von der Dokumentation unterstützt,

%Vor%

macht keinen Unterschied.

Gibt es andere Einstellungen oder muss ich einen benutzerdefinierten Deserializer schreiben?
Wenn letzteres, gibt es ein einfaches Beispiel dafür, dies mit Jackson 2.0.4 zu tun? Ich bin neu in Jackson (und das erste Mal Poster, also sei sanft). Ich habe viel gesucht, kann aber kein gutes Arbeitsbeispiel finden.

    
user1721784 08.10.2012, 02:42
quelle

2 Antworten

4

Problem: Obwohl Single-Element-to-Array funktioniert, versuchen Sie immer noch eine Umwandlung von (leer) String in ein Objekt. Ich gehe davon aus, dass dies das Problem ist, dem Sie gegenüberstehen, obwohl es ohne Ausnahme schwer zu sagen ist.

Aber es gibt auch DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT , was zusammen mit dem ersten Feature den Trick machen könnte. Wenn dies der Fall ist, erhalten Sie List mit einem einzelnen "leeren Objekt", das heißt Things instance ohne Werte.

Nun sollte idealerweise Folgendes passieren: Wenn Sie nur ACCEPT_EMPTY_STRING_AS_NULL_OBJECT aktiviert haben, würde das wahrscheinlich tun, was Sie wollen: Nullwert für thelist -Eigenschaft.

    
StaxMan 08.10.2012 20:47
quelle
1

Hi, ich habe ein ähnliches Problem gelöst, wenn ich ein Objekt wie dieses bekomme

%Vor%

von externem System so "param" war OBJECT für mich, die ich versuche zu deserilisieren. Wenn dieses Objekt im externen System definiert wurde, funktioniert es ohne Probleme. Aber wenn OBJECT "param" im externen System nicht definiert wurde, bekomme ich leeres ARRAY statt leeres OBJECT

%Vor%

, die eine Mapping-Ausnahme verursachen. Ich löse es mit der Erstellung von benutzerdefinierten JSON Deserializer, die sehr gutes Beispiel hat Mr.B 11.07.2014 15:37

quelle

Tags und Links