2011-11-15 29 views
12

que tiene un modelo de esa manera:Jackson Deserialize variable como JSON cadena

private String message; 
private Integer errorCode;  
private String data; 

me sale una cadena JSON de forma remota y el mensaje, las variables errorCode obtiene el valor correcto. Sin embargo, no quiero deserializar mi variable de datos. Yo quiero que sea una cadena JSON como como:

{"cat": "1.2.3.4", "ner": "80", "name": "pinta" } 

después de esto yo deserializar a oponerse a mí mismo. ¿Cómo puedo hacer eso?

PS: Para aclarar la pregunta:

consigo una cadena JSON así:

{ "datos": { "gato": "1.2.3.4", "ner": "80 ", "name": "pinta"}, "mensaje": "m", "errorCode": 12}

Después de deserialización mi variables deben tener valores que:

message => "m" 
errorCode => 12 
data => "{"cat": "1.2.3.4", "ner": "80", "name": "pinta" }" 
+0

¿Podría dejarlo más claro? – MByD

+0

@MByD Cuando depuro mis variables después de la deserialización, quiero ver que mi variable de datos tiene ese valor: '{" cat ":" 1.2.3.4 "," ner ":" 80 "," nombre ":" pinta "} 'porque lo envío así:' "datos": {"cat": "1.2.3.4", "ner": "80", "nombre": "pinta"} ' – kamaci

+0

@MByD He editado mi pregunta. – kamaci

Respuesta

7

Le sugiero que permita que los datos se vinculen a un objeto intermedio; generalmente esto es java.util.Map o org.codehaus.jackson.JsonNode (Árbol JSON). Y luego puede acceder a los datos de la forma que desee; incluyendo la conversión fácil a un POJO usando ObjectMapper.convertValue(inputPojo, outputType)).

+0

gracias por su respuesta y votar. Solo quiero dejarlo en claro: yo uso ese 'myObject = mapper.readValue (data, clz);' ¿cuál es la diferencia entre 'transferObject = mapper.convertValue (data, clz);'? – kamaci

+0

readValue() analiza el contenido de una fuente determinada, mientras que convertValor() es equivalente al valor de escritura, leyéndolo como un tipo dado - puede convertir cualquier cosa que se pueda serializar como JSON en cualquier cosa que pueda vincularse desde JSON. – StaxMan

+0

+1 La mejor respuesta para este problema. Mantener el tipo como JsonNode lo hace capaz de simplemente llamar a String() y obtener el valor String json. Por supuesto primero se deserializa, y luego se serializa de nuevo, lo que es un poco derrochador, pero hasta ahora, esta es la única manera de hacerlo bien y limpiar – Rasive

Cuestiones relacionadas