How do I pretty-print existing JSON data with Java?

JavaJsonFormattingPretty Print

Java Problem Overview


I have a compact JSON string, and I want to format it nicely in Java without having to deserialize it first -- e.g. just like jsonlint.org does it. Are there any libraries out there that provides this?

A similar solution for XML would also be nice.

Java Solutions


Solution 1 - Java

int spacesToIndentEachLevel = 2;
new JSONObject(jsonString).toString(spacesToIndentEachLevel);

Using org.json.JSONObject (built in to JavaEE and Android)

Solution 2 - Java

Use gson. https://www.mkyong.com/java/how-to-enable-pretty-print-json-output-gson/

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(my_bean);

output

{
  "name": "mkyong",
  "age": 35,
  "position": "Founder",
  "salary": 10000,
  "skills": [
    "java",
    "python",
    "shell"
  ]
}

Solution 3 - Java

Another way to use gson:

String json_String_to_print = ...
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
return gson.toJson(jp.parse(json_String_to_print));

It can be used when you don't have the bean as in susemi99's post.

Solution 4 - Java

In one line:

String niceFormattedJson = JsonWriter.formatJson(jsonString)

or

System.out.println(JsonWriter.formatJson(jsonString.toString()));

The json-io libray (https://github.com/jdereg/json-io) is a small (75K) library with no other dependencies than the JDK.

In addition to pretty-printing JSON, you can serialize Java objects (entire Java object graphs with cycles) to JSON, as well as read them in.

Solution 5 - Java

If you are using jackson you can easily achieve this with configuring a SerializationFeature in your ObjectMapper:

com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();

mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

mapper.writeValueAsString(<yourObject>);

Thats it.

Solution 6 - Java

I think for pretty-printing something, it's very helpful to know its structure.

To get the structure you have to parse it. Because of this, I don't think it gets much easier than first parsing the JSON string you have and then using the pretty-printing method toString mentioned in the comments above.

Of course you can do similar with any JSON library you like.

Solution 7 - Java

I fount a very simple solution:

<dependency>
	<groupId>com.cedarsoftware</groupId>
	<artifactId>json-io</artifactId>
	<version>4.5.0</version>
</dependency>

Java code:

import com.cedarsoftware.util.io.JsonWriter;
//...
String jsonString = "json_string_plain_text";
System.out.println(JsonWriter.formatJson(jsonString));

Solution 8 - Java

Underscore-java library has methods U.formatJson(json) and U.formatXml(xml).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionneu242View Question on Stackoverflow
Solution 1 - JavaHeath BordersView Answer on Stackoverflow
Solution 2 - JavaChanghoonView Answer on Stackoverflow
Solution 3 - JavavcycyvView Answer on Stackoverflow
Solution 4 - JavaJohn DeRegnaucourtView Answer on Stackoverflow
Solution 5 - JavaLars RückemannView Answer on Stackoverflow
Solution 6 - JavaWaldheinzView Answer on Stackoverflow
Solution 7 - JavaJames GrahamView Answer on Stackoverflow
Solution 8 - JavaValentyn KolesnikovView Answer on Stackoverflow