Deserialisieren ArrayList von String mit Jackson ACCEPT_SINGLE_VALUE_AS_ARRAY

Problem Deserialisieren array als string mit Jackson 2

Dies ist ein ähnliches problem zu Deserialisieren ArrayList von String mit Jackson

Eingehende JSON (die ich nicht kontrollieren kann) hat ein element "thelist", die ein array.
Manchmal wird es jedoch als eine leere Zeichenfolge anstelle eines Arrays:

zB. statt "thelist" : [ ]

es kommt, wie "thelist" : ""

Ich habe Probleme beim Parsen beiden Fällen.

Den 'Probe.json' - Datei, die gut funktioniert:

{
   "name" : "widget",
   "thelist" : 
    [
       {"height":"ht1","width":"wd1"}, 
       {"height":"ht2","width":"wd2"}
    ]
}

Den Klassen:

public class Product { 
    private String name; 
    private List<Things> thelist; 
    //with normal getters and setters not shown
}

public class Things {
        String height;
        String width;
        //with normal getters and setters not shown
}

Den code, der gut funktioniert:

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test2 {
 public static void main(String[] args) 
    {
        ObjectMapper mapper = new ObjectMapper(); 
        Product product = mapper.readValue( new File("sample.json"), Product.class);
    }
}

Jedoch, wenn die JSON-hat einen leeren string statt einem array, dh. "thelist" : ""

Ich bekomme diese Fehlermeldung:

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [collection type; class java.util.ArrayList, contains [simple type, class com.test.Things]] from JSON String; no single-String constructor/factory method (through reference chain: com.test.Product["thelist"])

Wenn ich diese Zeile hinzufügen (die Werke für Ryan in Deserialisieren ArrayList von String mit Jackson und scheinbar unterstützt durch die Dokumentation),

mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

macht es keinen Unterschied.

Gibt es eine andere Einstellung oder brauche ich zum schreiben eines benutzerdefinierten deserializer?

Wenn letzteres, gibt es ein einfaches Beispiel dies zu tun, mit Jackson 2.0.4 ?

Ich bin neu in Jackson (und erste mal poster, so sanft sein). Ich habe getan, viele suchen, aber nicht finden können, ein gutes Beispiel.

InformationsquelleAutor user1721784 | 2012-10-08
Schreibe einen Kommentar