Tengo los 2 siguientes clases:

@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;
}

Cuando intento deserializar el uso de esta prueba:

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);
}

Me sale el siguiente excepción:

com.fasterxml.jackson.databind.JsonMappingException: no se Puede
crear instancias de valor de tipo java.util.LinkedHashMap de la Cadena de valor
(‘{‘); no solo constructor de Cadena/de fábrica del método en [Fuente:
{«changes»:[{«epoch»:1441556306522,»payload»:»{«to»:1}»},{«epoch»:1441555481524,»payload»:»{«to»:-1}»}],»more»:false};
línea: 1, columna: 35] (a través de la cadena de referencia:
demo.ChangesJSON[«cambios»]->java.util.ArrayList[0]->demo.ChangeJSON[«carga útil»])

Parece que hay un problema con el mapa, pero pensé Jackson debe ser capaz de manejar los mapas. Tengo el mismo problema también cuando puedo cambiar el mapa a Mapa. Pero no tengo necesidad de apoyo en todo tipo de clases, ya que los valores del mapa.

  • Su JSON no es válido. Si se quita el escape de barras, contiene "payload": "{"to":1}"} en lugar de "payload": {"to":1}}
InformationsquelleAutor checklist | 2015-09-07

2 Comentarios

  1. 6

    Tiene comillas alrededor de la payload objeto. Trate de cambiar esta parte:

    \"payload\":\"{\"to\":1}\"

    a esto:

    \"payload\":{\"to\":1}
  2. 1

    Creo que es el JSON que sí que tiene un problema. Es unescapes a:

    {"changes":[{"epoch":1441556306522,"payload":"{"to":1}"},{"epoch":1441555481524,"payload":"{"to":-1}"}],"more":false}

    Probablemente debería ser algo como:

    {"changes":[{"epoch":1441556306522,"payload":{"to":1}},{"epoch":1441555481524,"payload":{"to":-1}}],"more":false}

    Así:

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

Dejar respuesta

Please enter your comment!
Please enter your name here