Dies ist die JSON-Zeichenfolge, die ich habe:
{"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}]}
Ich muss den obigen JSON String
in Pretty Print JSON Output (mit Jackson) konvertieren , wie unten:
{
"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
}
]
}
Kann mir jemand ein Beispiel geben, das auf meinem obigen Beispiel basiert? Wie kann dieses Szenario erreicht werden? Ich weiß, dass es viele Beispiele gibt, aber ich kann diese nicht richtig verstehen. Jede Hilfe wird anhand eines einfachen Beispiels geschätzt.
Aktualisiert:
Unten ist der Code, den ich benutze:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonString));
Dies funktioniert jedoch nicht so, wie ich die Ausgabe wie oben erwähnt benötigt habe.
Hier ist das POJO, das ich für den obigen JSON verwende:
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;
}
Kann mir jemand sagen, ob ich das richtige POJO für den JSON habe oder nicht?
Aktualisiert:
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));
Die folgende Zeile druckt ungefähr so aus:
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"
} ]
}
So musste ich gezeigt werden. Aber wenn ich es zu einem Modell wie diesem hinzufüge:
model.addAttribute("response", (indented));
Und zeigt es dann auf einer Ergebnisformular-JSP-Seite wie unten:
<fieldset>
<legend>Response:</legend>
<strong>${response}</strong><br />
</fieldset>
Ich bekomme so etwas:
{ "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" } ] }
was ich nicht brauche. Ich brauchte die Art und Weise, wie es oben ausgedruckt wurde. Kann mir jemand sagen, warum es so passiert ist?
quelle
Die einfachste und zugleich kompakteste Lösung (für v2.3.3):
quelle
Der neue Weg mit Jackson 1.9+ ist der folgende:
Die Ausgabe wird korrekt formatiert!
quelle
Für Jackson 1.9 können wir den folgenden Code für hübschen Druck verwenden.
quelle
Ich denke, dies ist die einfachste Technik, um die JSON-Daten zu verschönern.
Dabei ist Response ein String.
Geben Sie einfach die 4 (indentSpaces) ein
toString()
Methode.Hinweis: Es funktioniert gut in Android ohne Bibliothek. In Java müssen Sie jedoch die Bibliothek org.json verwenden.
quelle
String json = new GsonBuilder().setPrettyPrinting().create().toJson(map); String indentedJson = (new JSONObject(json)).toString(4);
Aus irgendeinem Grund verliert der zweite die Reihenfolge der SchlüsselDies scheint die Antwort auf Ihre Frage zu sein . Es heißt, es wird Spring verwendet, aber ich denke, das sollte Ihnen in Ihrem Fall trotzdem helfen. Lassen Sie mich den Code hier einfügen, damit er bequemer ist:
quelle
Sie können dies auf folgende Weise erreichen:
1. Verwenden von Jackson von Apache
Folgende Klasse importieren:
Die Gradle-Abhängigkeit ist:
2. Verwenden von Gson von Google
Folgende Klasse importieren:
Es ist gradle ist:
Hier können Sie die richtige aktualisierte Version aus dem Repository herunterladen.
quelle
ObjectMapper.readTree()
kann dies in einer Zeile tun:quelle