Questa è la stringa JSON che ho:
{"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}]}
Devo convertire il JSON sopra String
in Output JSON Pretty Print (usando Jackson), come di seguito:
{
"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
}
]
}
Qualcuno può fornirmi un esempio basato sul mio esempio sopra? Come realizzare questo scenario? So che ci sono molti esempi, ma non sono in grado di capirli correttamente. Qualsiasi aiuto sarà apprezzato con un semplice esempio.
aggiornato:
Di seguito è riportato il codice che sto usando:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString));
Ma questo non funziona con il modo in cui avevo bisogno dell'output come menzionato sopra.
Ecco il POJO che sto usando per il JSON sopra:
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;
}
Qualcuno può dirmi se ho ottenuto il POJO giusto per il JSON o no?
aggiornato:
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 riga sotto stampa qualcosa del genere:
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"
} ]
}
che è il modo in cui avevo bisogno di essere mostrato. Ma quando lo aggiungo al modello in questo modo:
model.addAttribute("response", (indented));
E poi lo mostra in una pagina jsp del form dei risultati come di seguito:
<fieldset>
<legend>Response:</legend>
<strong>${response}</strong><br />
</fieldset>
Ottengo qualcosa del genere:
{ "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" } ] }
di cui non ho bisogno. Avevo bisogno del modo in cui è stato stampato sopra. Qualcuno può dirmi perché è successo in questo modo?