Hübsches Drucken von JSON aus dem ObjectMapper von Jackson 2.2
Lesezeit: 4 Minuten
Im Moment habe ich eine Instanz von org.fasterxml.jackson.databind.ObjectMapper und möchte eine bekommen String mit hübschem JSON. Alle Ergebnisse meiner Google-Suche haben Jackson 1.x-Möglichkeiten ergeben, und ich kann anscheinend nicht die richtige, nicht veraltete Methode finden, dies mit 2.2 zu tun. Auch wenn ich nicht glaube, dass Code für diese Frage unbedingt notwendig ist, habe ich gerade 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
gregwhitaker
Sie können Pretty-Printing aktivieren, indem Sie die SerializationFeature.INDENT_OUTPUT auf Ihrem ObjectMapper so:
Ich habe das auch versucht, aber es scheint so SerializationConfig ist aber gelöst SerializationConfig.Feature ist nicht. Dies scheint eine weitere Methode des hübschen Druckens zu sein, die ebenfalls veraltet ist, es sei denn, ich vermisse etwas. Da ist ein Feature Klasse, die für sich allein steht, aber keine hat INDENT_OUTPUT ständig drinnen. 🙁
– Anthony Atkinson
12. Juli 2013 um 15:02 Uhr
Exzellent! Ich würde gerne wissen, wie du das findest 😉
– Anthony Atkinson
12. Juli 2013 um 15:15 Uhr
Ich habe mir eines meiner Projekte angesehen, aber es scheint, dass es auch hier ist: github.com/FasterXML/jackson-databind unter “Häufig verwendete Funktionen”
– gregwhitaker
12. Juli 2013 um 15:18 Uhr
Der relevante benötigte Import ist import com.fasterxml.jackson.databind. {SerializationFeature, ObjectMapper}
– dgh
26. August 2013 um 6:49 Uhr
Auf 2.2.1 habe ich Folgendes benötigt: import org.codehaus.jackson.map.SerializationConfig.Feature; mapper.enable (Feature.INDENT_OUTPUT);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(someObject);
Hoffe das hilft…
Ich habe diesen Artikel gefunden und musste enttäuscht feststellen, dass dies eine dieser veralteten Methoden des hübschen Druckens ist. defaultPrettyPrintingWriter() ist nicht mehr verfügbar (selbst als veraltete Methode) auf der ObjectMapper Klasse.
– Anthony Atkinson
12. Juli 2013 um 14:39 Uhr
Ich habe eigentlich darüber nachgedacht, aber meine Anwendung ist bereits stark Jackson-orientiert und die gesamte Funktionalität ist eigentlich vollständig. Der Webanwendungsserver, auf dem dies gehostet wird, wird bereits ziemlich stark besteuert, und ich möchte keine zusätzlichen Bibliotheken laden, nur um Anforderungen und Antworten zu protokollieren. Ich werde Ihre Antwort jedoch definitiv positiv bewerten.
– Anthony Atkinson
12. Juli 2013 um 14:59 Uhr
@AnthonyAtkinson in Jackson 2.3 gibt es eine Methode ObjectMapper.writerWithDefaultPrettyPrinter()
– matt b
21. Januar 2014 um 22:41 Uhr
Die Jackson-API hat sich geändert:
new ObjectMapper()
.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(new HashMap<String, Object>());
Es ist immer noch möglich (mit Jackson 2.7.6) zu verwenden 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 von der konfigurierten erhalten ObjectMapper.
– Martin
11. Juli 2017 um 14:04 Uhr
der 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:
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:
val indentOutput = SerializationFeature.INDENT_OUTPUT
val defaultStateField = indentOutput.getClass.getDeclaredField("_defaultState")
defaultStateField.setAccessible(true)
defaultStateField.set(indentOutput, true)
Mohana Rao SV
Wenn Sie eine Kombination aus Feder und Jackson verwenden, können Sie dies wie folgt tun. Ich folge @gregwhitaker wie vorgeschlagen, aber im Frühlingsstil.
Wenn andere, die diese Frage sehen, nur eine JSON-Zeichenfolge haben (nicht in einem Objekt), können Sie sie in eine einfügen HashMap und bekomme die noch ObjectMapper arbeiten. Das result Variable ist Ihre JSON-Zeichenfolge.