Kann nicht instanziiert Wert vom Typ java.util.LinkedHashMap von der String-Wert ('{'); no-single-String-Konstruktor/factory-Methode

Habe ich die folgenden 2 Klassen:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ChangesJSON {

    @JsonProperty("changes")
    List<ChangeJSON> changes;

    @JsonProperty("more")
    Boolean more;
}

public class ChangeJSON {

    @JsonProperty("epoch")
    Long epoch;

    @JsonProperty("payload")
    Map<String, Object> payload;
}

Wenn ich versuche zu Deserialisieren mit diesem test:

String test = "{\"changes\":[{\"epoch\":1441556306522,\"payload\":\"{\"to\":1}\"},{\"epoch\":1441555481524,\"payload\":\"{\"to\":-1}\"}],\"more\":false}";

@Test
public void myTest() {
    ObjectMapper mapper = new ObjectMapper();
    ChangesJSON result = null;
    try {
        result = mapper.readValue(test, ChangesJSON.class);
    } catch (IOException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }
    assertNotNull(result);
}

Bekomme ich die folgende exception:

com.fasterxml.jackson.databind-Methode.JsonMappingException: Kann nicht
instanziieren Wert vom Typ java.util.LinkedHashMap aus String-Wert
('{'); no-single-String-Konstruktor/factory-Methode [Quelle:
{"changes":[{"epoch":1441556306522,"payload":"{"to":1}"},{"epoch":1441555481524,"payload":"{"to":-1}"}],"more":false};
Zeile: 1, Spalte: 35] (über die Referenz-Kette:
demo.ChangesJSON["änderungen"]->java.util.ArrayList[0]->demo.ChangeJSON["Nutzlast"])

Scheint es, dass es ein Problem mit der Karte, aber ich dachte, Jackson sollte in der Lage sein zu handhaben Karten. Ich bekomme das gleiche Problem auch wenn ich die Karte zu Karte. Aber ich brauche die Unterstützung aller Arten von Klassen als Werte von der Karte.

Ihre JSON ist ungültig. Wenn Sie entfernen die Flucht umgekehrte Schrägstriche enthält es "payload": "{"to":1}"} statt "payload": {"to":1}}

InformationsquelleAutor checklist | 2015-09-07

Schreibe einen Kommentar