Im Moment habe ich eine Instanz von org.fasterxml.jackson.databind.ObjectMapper
und möchte eine String
mit hübschem JSON bekommen. Alle Ergebnisse meiner Google-Suche haben Jackson 1.x-Methoden ergeben, und ich kann mit 2.2 anscheinend nicht die richtige, nicht veraltete Methode finden. Auch wenn ich nicht glaube, dass Code für diese Frage unbedingt erforderlich ist, habe ich Folgendes:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
System.out.println("\n\n----------REQUEST-----------");
StringWriter sw = new StringWriter();
mapper.writeValue(sw, jsonObject);
// Want pretty version of sw.toString() here
SerializationConfig
es gelöst ist, aberSerializationConfig.Feature
nicht. Dies scheint eine andere Methode des hübschen Druckens zu sein, die ebenfalls veraltet ist, es sei denn, ich vermisse etwas. Es gibt eineFeature
Klasse, die für sich getrennt ist, aber keineINDENT_OUTPUT
Konstante im Inneren hat. :(Laut mkyong besteht die magische Beschwörung darin
defaultPrintingWriter
, JSON hübsch zu drucken :Neuere Versionen:
Ältere Versionen:
Scheint, als hätte ich ein bisschen schnell die Waffe gesprungen. Sie könnten gson ausprobieren , dessen Konstruktor das hübsche Drucken unterstützt :
Hoffe das hilft...
quelle
defaultPrettyPrintingWriter()
ist für dieObjectMapper
Klasse nicht mehr verfügbar (auch nicht als veraltete Methode) .ObjectMapper.writerWithDefaultPrettyPrinter()
Die Jackson API hat sich geändert:
quelle
new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true).writer().writeValueAsString(new HashMap<String, Object>());
. Sie müssen nur sicherstellen, dass Sie den Writer verwenden, den Sie vom konfigurierten erhaltenObjectMapper
.Das IDENT_OUTPUT hat nichts für mich getan und um eine vollständige Antwort zu geben, die mit meinen Jackson 2.2.3-Gläsern funktioniert:
quelle
Wenn Sie dies standardmäßig für ALLE ObjectMapper-Instanzen in einem Prozess aktivieren möchten, finden Sie hier einen kleinen Hack, der den Standardwert von INDENT_OUTPUT auf true setzt:
quelle
Wenn Sie eine Kombination aus Feder und Jackson verwenden, können Sie dies wie folgt tun. Ich folge @gregwhitaker wie vorgeschlagen, implementiere aber im Frühlingsstil.
quelle
Wenn andere, die diese Frage anzeigen, nur eine JSON-Zeichenfolge haben (nicht in einem Objekt), können Sie diese in eine Zeichenfolge einfügen
HashMap
und die Funktion trotzdem ausführenObjectMapper
. Dieresult
Variable ist Ihre JSON-Zeichenfolge.quelle
Versuche dies.
quelle