Esta es la cadena JSON que tengo:
{"attributes":[{"nm":"ACCOUNT","lv":[{"v":{"Id":null,"State":null},"vt":"java.util.Map","cn":1}],"vt":"java.util.Map","status":"SUCCESS","lmd":13585},{"nm":"PROFILE","lv":[{"v":{"Party":null,"Ads":null},"vt":"java.util.Map","cn":2}],"vt":"java.util.Map","status":"SUCCESS","lmd":41962}]}
Necesito convertir el JSON anterior String
en Salida JSON de Pretty Print (usando Jackson), como a continuación:
{
"attributes": [
{
"nm": "ACCOUNT",
"lv": [
{
"v": {
"Id": null,
"State": null
},
"vt": "java.util.Map",
"cn": 1
}
],
"vt": "java.util.Map",
"status": "SUCCESS",
"lmd": 13585
},
{
"nm": "PROFILE
"lv": [
{
"v": {
"Party": null,
"Ads": null
},
"vt": "java.util.Map",
"cn": 2
}
],
"vt": "java.util.Map",
"status": "SUCCESS",
"lmd": 41962
}
]
}
¿Alguien puede proporcionarme un ejemplo basado en mi ejemplo anterior? ¿Cómo lograr este escenario? Sé que hay muchos ejemplos, pero no puedo entenderlos correctamente. Cualquier ayuda será apreciada con un simple ejemplo.
Actualizado:
A continuación se muestra el código que estoy usando:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString));
Pero esto no funciona de la manera que necesitaba la salida como se mencionó anteriormente.
Aquí está el POJO que estoy usando para el JSON anterior:
public class UrlInfo implements Serializable {
private List<Attributes> attribute;
}
class Attributes {
private String nm;
private List<ValueList> lv;
private String vt;
private String status;
private String lmd;
}
class ValueList {
private String vt;
private String cn;
private List<String> v;
}
¿Alguien puede decirme si obtuve el POJO correcto para el JSON o no?
Actualizado:
String result = restTemplate.getForObject(url.toString(), String.class);
ObjectMapper mapper = new ObjectMapper();
Object json = mapper.readValue(result, Object.class);
String indented = mapper.defaultPrettyPrintingWriter().writeValueAsString(json);
System.out.println(indented);//This print statement show correct way I need
model.addAttribute("response", (indented));
La siguiente línea imprime algo como esto:
System.out.println(indented);
{
"attributes" : [ {
"nm" : "ACCOUNT",
"error" : "null SYS00019CancellationException in CoreImpl fetchAttributes\n java.util.concurrent.CancellationException\n\tat java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:231)\n\tat java.util.concurrent.FutureTask.",
"status" : "ERROR"
} ]
}
así es como necesitaba que me mostraran. Pero cuando lo agrego al modelo así:
model.addAttribute("response", (indented));
Y luego lo muestra en una página jsp de formulario de resultados como a continuación:
<fieldset>
<legend>Response:</legend>
<strong>${response}</strong><br />
</fieldset>
Me sale algo como esto:
{ "attributes" : [ { "nm" : "ACCOUNT", "error" : "null
SYS00019CancellationException in CoreImpl fetchAttributes\n
java.util.concurrent.CancellationException\n\tat
java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:231)\n\tat
java.util.concurrent.FutureTask.", "status" : "ERROR" } ] }
que no necesito Necesitaba la forma en que se imprimió arriba. ¿Alguien puede decirme por qué sucedió de esta manera?