如何使用Java美化现有的JSON数据?

67

我有一个紧凑的JSON字符串,并且希望在Java中漂亮地格式化它,而无需先反序列化它 - 就像jsonlint.org所做的那样。是否有任何库可以提供此功能?

对于XML的类似解决方案也很不错。


你所说的pretty print是指着色、缩进还是两者都包括? - Eric
30
JSONObject有一个toString(int)方法,可以提供间隔以进行漂亮的打印输出。 - Buhake Sindi
@The Elite Gentleman:我需要反序列化JSON数据以获取JSONObject,是吗? - neu242
@neu242,不需要,JSONObject已经是JSON数据了。你为什么想这样做呢? - Buhake Sindi
GWT 2.5.0 的 JSONObject 上没有 toString(int) 方法。 - Rondo
我会看一下Nashorn(Java安装的一部分)。https://dev59.com/Nm855IYBdhLWcg3w3IVh - jarry_dk
7个回答

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

使用内置于JavaEE和Android的org.json.JSONObject


3
使用哪个库?现有的回答不是很有帮助。 - Andrew
1
嗯...我不是在开发Android,也不部署到Java EE容器...因此需要澄清。谢谢你补充这个 :) 那么对于像我这样的人来说,如果要分发一个针对SE的Java应用程序,它将是一个库,例如org.json:json:20090211 - Andrew
对于我们使用Android的人来说,这非常有用,并且在文档的快速查看中并不真正清晰。没想到它是内置的。 - manroe
6
org.json.JSONObject不是JavaEE内置的。用于JsonObjectJSON-P库是javax.json.JsonObject - Buhake Sindi
太棒了,这非常有用。 - dadan
显示剩余4条评论

24

15

使用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的帖子中那样使用它。


2
实例化 JsonParser 现已弃用。请改用静态方法 JsonParser.parseString(json_String_to_print) - kousen
这是正确的答案,让我们点赞它!! - Dan Ortega
this must be accepted answer! - aligur

11

如果你正在使用jackson,你可以通过在ObjectMapper中配置SerializationFeature轻松实现这一点:

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

mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

mapper.writeValueAsString(<yourObject>);

就是这样。


4

我认为,想要美化某些内容,了解其结构非常有帮助。

要获取结构,您必须先解析它。因此,我认为最好的方法是先解析您拥有的JSON字符串,然后使用上面评论中提到的漂亮打印方法toString

当然,您可以使用任何喜欢的JSON库进行类似操作。


1
链接已损坏。 - Valentyn Kolesnikov

2
我找到了一个非常简单的解决方案:
<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));

2

Underscore-java库提供了U.formatJson(json)U.formatXml(xml)方法,可以用来格式化json和xml。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接