2011-03-30 19 views
6

tengo el siguiente JSON:Cómo deserializar el siguiente JSON usando Jackson

{ 
    "id":"myid", 
    "fields":{ 
    "body":"text body" 
    } 
} 

que quiero deserializar en la siguiente clase Java:

class TestItem { 
private String id; 
private String body; 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getBody() { 
    return body; 
} 

public void setBody(String body) { 
    this.body = body; 
} 

utilizando el deserializer Jackson JSON. Esto no funciona porque el campo body está anidado dentro de una clase interna fields.

que no puedo cambiar la estructura JSON, por lo que ¿hay alguna manera (tal vez usando anotaciones) que puedo volver a asignar el campo de body desde TestItem.fields.body a TestItem.body?

Editar: que debería haber dicho esto es parte de una jerarquía de clases más grande y el objetivo del ejercicio es reducir la profundidad de la misma. En otras palabras, sé que PODRÍA declarar una clase interna y luego acceder a eso, pero eso no es lo que estoy tratando de lograr.

+0

¿Cómo leer el mismo mediante API de transmisión? – emaillenin

Respuesta

5

Hay un par de solicitudes de características que (de ser implementadas) permitirían un envoltorio/desenvuelto limitado de un nivel. Pero actualmente no hay una manera declarativa de hacer esto. Y hasta cierto punto es un caso extremo, ya que esto se aplica a la transformación de datos en oposición al enlace de datos (desafortunadamente no puedo pensar en buenas libs de transformación de objetos, por lo que puede haber un poco de espacio).

Lo que normalmente se hace, entonces, es hacer un enlace de dos fases: primero en tipos intermedios (a menudo java.util.Map, o JsonNode de jackson (modelo de árbol)); modifícalos y luego conviértelos de este tipo a resultados reales. Por ejemplo, algo como esto:

JsonNode root = mapper.readTree(jsonSource); 
// modify it appropriately (add, remove, move nodes) 
MyBean bean = mapper.convertValue(root, MyBean.class); 
Cuestiones relacionadas