Java 中的漂亮打印 JSON
我正在使用 json-simple我需要漂亮地打印 JSON 数据(使其更易于阅读)。
我无法在该库中找到此功能。 这通常是如何实现的?
I'm using json-simple and I need to pretty-print JSON data (make it more human readable).
I haven't been able to find this functionality within that library.
How is this commonly achieved?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
我使用 org.json 内置方法来漂亮地打印数据。
JSON 中字段的顺序根据定义是随机的。具体顺序取决于解析器的实现。
I used org.json built-in methods to pretty-print the data.
The order of fields in JSON is random per definition. A specific order is subject to parser implementation.
与杰克逊(
com.fasterxml.jackson.databind
):来自:如何启用漂亮的打印 JSON 输出(Jackson)
我知道这已经在答案中,但我想在这里单独写一下,因为很可能,你已经有了 Jackson作为依赖项,因此您需要的只是一行额外的代码
With Jackson (
com.fasterxml.jackson.databind
):From: How to enable pretty print JSON output (Jackson)
I know this is already in the answers, but I want to write it separately here because chances are, you already have Jackson as a dependency and so all you will need would be an extra line of code
似乎 GSON 支持这一点,尽管我不知道你是否想从你所在的库切换使用。
来自用户指南:
It seems like GSON supports this, although I don't know if you want to switch from the library you are using.
From the user guide:
使用组织 json。参考链接
使用格森。参考链接
使用 Jackson。参考链接
使用 Genson。参考链接。
使用 javax.json。参考链接。
使用 Moshi 库。参考链接。
(或者)
Using org json. Reference link
Using Gson. Reference link
Using Jackson. Reference link
Using Genson. Reference link.
Using javax.json. Reference link.
Using Moshi library. Reference link.
(OR)
如果您使用 Java API 进行 JSON 处理 (JSR-353) 实现,则可以在创建
JsonGeneratorFactory
时指定JsonGenerator.PRETTY_PRINTING
属性。以下示例最初发布在我的 上博客文章。
If you are using a Java API for JSON Processing (JSR-353) implementation then you can specify the
JsonGenerator.PRETTY_PRINTING
property when you create aJsonGeneratorFactory
.The following example has been originally published on my blog post.
在一行中使用 GSON 进行漂亮的打印:
除了内联之外,这相当于 接受的答案。
Pretty printing with GSON in one line:
Besides inlining, this is equivalent to the accepted answer.
大多数现有答案要么依赖于某些外部库,要么需要特殊的 Java 版本。下面是一个简单的代码,用于漂亮地打印 JSON 字符串,仅使用通用 Java API(在 Java 7 中可用,但尚未尝试过旧版本)。
基本思想是根据 JSON 中的特殊字符触发格式设置。例如,如果观察到“{”或“[”,代码将创建一个新行并增加缩进级别。
免责声明:我只针对一些简单的 JSON 情况(基本键值对、列表、嵌套 JSON)进行了测试,因此可能需要对更一般的 JSON 文本进行一些工作,例如内部带引号的字符串值或特殊字符(\n、\ t等)。
Most of the existing answers either depend on some external library, or requiring a special Java version. Here is a simple code to pretty print a JSON string, only using general Java APIs (available in Java 7 for higher; haven't tried older version although).
The basic idea is to tigger the formatting based on special characters in JSON. For example, if a '{' or '[' is observed, the code will create a new line and increase the indent level.
Disclaimer: I only tested this for some simple JSON cases (basic key-value pair, list, nested JSON) so it may need some work for more general JSON text, like string value with quotes inside, or special characters (\n, \t etc.).
我的情况是我的项目使用旧版(非 JSR)JSON 解析器,不支持漂亮的打印。然而,我需要生成打印精美的 JSON 样本;只要您使用 Java 7 到 Java 14,就可以无需添加任何额外的库:
My situation is my project uses a legacy (non-JSR) JSON parser that does not support pretty printing. However, I needed to produce pretty-printed JSON samples; this is possible without having to add any extra libraries as long as you are using Java 7 till Java 14:
现在可以使用 JSONLib 库来实现:
http://json -lib.sourceforge.net/apidocs/net/sf/json/JSONObject.html
如果(且仅当)您使用重载的
toString(int indentationFactor)
方法而不是标准 <代码>toString() 方法。我已经在以下版本的 API 上验证了这一点:
Now this can be achieved with the JSONLib library:
http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONObject.html
If (and only if) you use the overloaded
toString(int indentationFactor)
method and not the standardtoString()
method.I have verified this on the following version of the API:
遵循 JSON-P 1.0 规范 (JSR-353) 的更新解决方案给定的
JsonStructure
(JsonObject
或JsonArray
)可能如下所示:Following the JSON-P 1.0 specs (JSR-353) a more current solution for a given
JsonStructure
(JsonObject
orJsonArray
) could look like this:在 JSONLib 中,您可以使用它:
来自 Javadoc:
In JSONLib you can use this:
From the Javadoc:
您可以像下面一样使用 Gson
从帖子 JSON Pretty使用 Gson 打印
或者,您可以像下面一样使用 Jackson
从帖子 Java 中漂亮的打印 JSON (Jackson)
希望有帮助!
You can use Gson like below
From the post JSON pretty print using Gson
Alternatively, You can use Jackson like below
From the post Pretty print JSON in Java (Jackson)
Hope this help!
这对我有用,使用杰克逊:
This worked for me, using Jackson:
更新:
new JsonParser().parse(...)
is@deprecated
基于Gson 2.8.6的javadoc:
JsonParser 静态方法:
包:
示例:
使用 Maven 的 Google Gson 依赖项:
参考:
Update:
new JsonParser().parse(...)
is@deprecated
Based on the javadoc for Gson 2.8.6:
JsonParser static methods:
Packages:
Example:
Google Gson dependency using Maven:
Reference:
所以我也喜欢 json-simple 库,并研究了如何漂亮地打印它的输出。不幸的是,虽然这是一个 开放问题,但我找不到任何代码为了它。所以我想我应该尝试一下,这就是我想出的(使用他们自己的源代码)..
它适用于
JSONObject
和JSONArray
即使它没有依赖于它们..因为这些是常规的Map
和List
对象。 (事实上代码是从同一个库中提取的)。https://github.com/crums-io/io-util/blob/master/src/main/java/io/crums/util/json/JsonPrinter.java
So I too like the
json-simple
lib, and looked into pretty printing its output. Unfortunately, while it's an open issue there, I couldn't find any code for it. So I thought I'd give it a try, here's what I came up with (using their own source)..It works for
JSONObject
andJSONArray
even tho it has no dependeny on them.. cuz these are regularMap
andList
objects resp. (and the fact code was lifted from same lib).https://github.com/crums-io/io-util/blob/master/src/main/java/io/crums/util/json/JsonPrinter.java
这将是打印对象的漂亮版本的公共方法(您需要安装 Gson 依赖项:
This would be a public method to print a pretty version of your object (You need the Gson dependency installed:
您可以使用小型 json 库
You can use small json library
我还使用 org.json.simple 包。我只是对格式化程序进行了编码,但由于我编写的程序中的 JSON 对象中没有空值、数字或布尔值,所以我只对字符串、对象和数组进行了编码。如果有人感兴趣,请让其成为公共领域。欢迎您添加缺少的数据类型(注释中说“它是一个字符串”)。另外,您可以添加缩进作为参数,而我的只有两个空格。请在测试改进后重新分享。
用法:
printJsonObject(jsonObject, "");
功能:
I also use the org.json.simple package. I have simply coded the formatter, but since I don't have nulls, numbers or booleans in my JSON objects in the program that I wrote, I only coded for strings, objects and arrays. If anyone is interested, let this just be in the public domain. You are welcome to add the missing data types (where it says in the comment "it's a string"). Also, you can add the indentation as a parameter whereas mine is just two spaces. Please reshare after you've tested your improvements.
Usage:
printJsonObject(jsonObject, "");
Functions:
Underscore-java 有静态方法
U.formatJson(json)
。支持五种格式类型:2、3、4、制表符和紧凑。 实例
输出:
Underscore-java has static method
U.formatJson(json)
.Five format types are supported: 2, 3, 4, tabs and compact. Live example
Output:
Google 的 GSON 可以以一种很好的方式做到这一点:
或者因为现在建议使用静态解析方法JsonParser 你也可以使用它:
这是导入语句:
这是 Gradle 依赖项:
Google's GSON can do this in a nice way:
or since it is now recommended to use the static parse method from JsonParser you can also use this instead:
Here is the import statement:
Here is the Gradle dependency: