Как мне красиво распечатать существующие данные JSON с помощью Java? - PullRequest
45 голосов
/ 31 мая 2011

У меня есть компактная строка JSON, и я хочу красиво отформатировать ее в Java без необходимости десериализации - например, точно так же, как это делает jsonlint.org .Существуют ли какие-либо библиотеки, которые обеспечивают это?

Подобное решение для XML также было бы неплохо.

Ответы [ 7 ]

67 голосов
/ 18 октября 2014
int spacesToIndentEachLevel = 2;
new JSONObject(jsonString).toString(spacesToIndentEachLevel);

Использование org.json.JSONObject (встроено в JavaEE и Android)

10 голосов
/ 24 февраля 2014

В одну строку:

String niceFormattedJson = JsonWriter.formatJson(jsonString)

или

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

Библиотека json-io (https://github.com/jdereg/json-io) - это небольшая (75 КБ) библиотека без других зависимостей, кромеJDK.

Помимо симпатичной печати JSON, вы можете сериализовать объекты Java (целые графы объектов Java с циклами) в JSON, а также читать их в.

7 голосов
/ 23 июля 2017

Используйте 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);

вывод

{
  "name": "mkyong",
  "age": 35,
  "position": "Founder",
  "salary": 10000,
  "skills": [
    "java",
    "python",
    "shell"
  ]
}
6 голосов
/ 19 февраля 2014

Если вы используете Джексона, вы можете легко добиться этого, настроив SerializationFeature в вашем ObjectMapper:

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

mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

mapper.writeValueAsString(<yourObject>);

Вот и все.

4 голосов
/ 31 мая 2011

Я думаю, что для красивой печати чего-то очень полезно знать его структуру.

Чтобы получить структуру, вам нужно разобрать ее.Поэтому я не думаю, что это станет намного проще, чем сначала проанализировать имеющуюся у вас строку JSON, а затем использовать метод симпатичной печати toString , упомянутый в комментариях выше.

КонечноВы можете сделать то же самое с любой библиотекой JSON.

3 голосов
/ 22 августа 2017

Другой способ использовать 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));

Может использоваться, когда у вас нет бина, как в сообщении susemi99.

1 голос
/ 18 августа 2016

Я нашел очень простое решение:

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

Java-код:

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