使用Jackson美化JSON

3

我正在使用 jackson 2.8.4,尝试对一个称为 json 的单行字符串进行漂亮打印(即通过缩进使其格式清晰易读)。

我尝试了以下方式:

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json);

并且

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
json = mapper.writeValueAsString(json);

但是JSON字符串json仍然只有一行。

编辑:

之前:

{"artifacts":[{"general":{"name":"jersey-client-2.26.jar","path":"doartifac/spielwiese-group-cache/org/glassfish/jersey/core/jersey-client/2.26/jersey-client-2.26.jar","pkg_type":"Maven","sha256":"3e44b7db8691eb0b2a6751eda888150b9ba1092a5805f11e4727fd4904407a41","component_id":"org.glassfish.jersey.core:jersey-client:2.26"},"issues":[],"licenses":[{"name":"CDDL-1.0","full_name":"Common Development and Distribution License (CDDL)\n            1.0","more_info_url":["http://www.opensource.org/licenses/cddl1.php","https://spdx.org/licenses/CDDL-1.0","https://spdx.org/licenses/CDDL-1.0.html","http://www.opensource.org/licenses/cddl1"],"components":["gav://org.glassfish.jersey.core:jersey-client:2.26"]},{"name":"GPL-2.0","full_name":"The GNU General Public License Version 2","more_info_url":["http://www.opensource.org/licenses/GPL-2.0","http://www.opensource.org/licenses/gpl-2.0.php","https://spdx.org/licenses/GPL-2.0","https://spdx.org/licenses/GPL-2.0.html","http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html"],"components":["gav://org.glassfish.jersey.core:jersey-client:2.26"]}]}]}

之后:

"{\"artifacts\":[{\"general\":{\"name\":\"jersey-client-2.26.jar\",\"path\":\"doartifac/spielwiese-group-cache/org/glassfish/jersey/core/jersey-client/2.26/jersey-client-2.26.jar\",\"pkg_type\":\"Maven\",\"sha256\":\"3e44b7db8691eb0b2a6751eda888150b9ba1092a5805f11e4727fd4904407a41\",\"component_id\":\"org.glassfish.jersey.core:jersey-client:2.26\"},\"issues\":[],\"licenses\":[{\"name\":\"CDDL-1.0\",\"full_name\":\"Common Development and Distribution License (CDDL)\\n            1.0\",\"more_info_url\":[\"http://www.opensource.org/licenses/cddl1.php\",\"https://spdx.org/licenses/CDDL-1.0\",\"https://spdx.org/licenses/CDDL-1.0.html\",\"http://www.opensource.org/licenses/cddl1\"],\"components\":[\"gav://org.glassfish.jersey.core:jersey-client:2.26\"]},{\"name\":\"GPL-2.0\",\"full_name\":\"The GNU General Public License Version 2\",\"more_info_url\":[\"http://www.opensource.org/licenses/GPL-2.0\",\"http://www.opensource.org/licenses/gpl-2.0.php\",\"https://spdx.org/licenses/GPL-2.0\",\"https://spdx.org/licenses/GPL-2.0.html\",\"http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html\"],\"components\":[\"gav://org.glassfish.jersey.core:jersey-client:2.26\"]}]}]}"

1
@ernest_k 抱歉,我拿了jersey-media-json-jackson的版本,现在已经更正了。 - J Fabian Meier
如果您能展示您的输入和输出字符串,那就太好了。 - OneCricketeer
1
你用什么来查看输出的?问题可能是在其他地方。第二段代码片段对我总是有效的。 - ernest_k
你是想使用那段代码格式化已有的JSON字符串吗? - Ulad
@ernest_k 谢谢,那解决了我的问题。 - J Fabian Meier
显示剩余5条评论
1个回答

5

尝试检查这个链接:使用Jackson将JSON字符串转换为漂亮的打印JSON输出

您需要先将现有的JSON读取为对象,然后对其进行序列化。 因为现在你只是序列化字符串。

更新:您需要执行类似于以下操作:

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);

String json = "here your ugly json";
Object jsonObject = mapper.readValue(json, Object.class);

String prettyFormatted = mapper.writeValueAsString(jsonObject);

这是我获取代码的地方。但不幸的是,它没有做到我希望它做到的。 - J Fabian Meier
@JFMeier 我更新了我的答案,请看一下,应该可以正常工作。 - Ulad

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