Java中的漂亮打印JSON

我正在使用json-simple,而且我需要漂亮地打印JSON数据(使其更具人性化)。

我一直无法在该库中find这个function。 这通常如何实现?

GSON可以很好的完成这个任务:

Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJSONString); String prettyJsonString = gson.toJson(je); 

我使用org.json内置方法来漂亮地打印数据。

 JSONObject json = new JSONObject(jsonString); // Convert text to object System.out.println(json.toString(4)); // Print it with specified indentation 

每个定义中JSON字段的顺序是随机的。 特定的顺序受制于parsing器的实现。

看来GSON支持这个,虽然我不知道你是否想从你正在使用的库切换。

从用户指南:

 Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonOutput = gson.toJson(someObject); 

使用GSON进行漂亮的打印:

 System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(jsonString))); 

除了内联,这相当于被接受的答案 。

如果您正在使用Java API进行JSON处理(JSR-353)实现,那么您可以在创buildJsonGeneratorFactory时指定JsonGenerator.PRETTY_PRINTING属性。

以下示例最初发布在我的博客文章中 。

 import java.util.*; import javax.json.Json; import javax.json.stream.*; Map<String, Object> properties = new HashMap<String, Object>(1); properties.put(JsonGenerator.PRETTY_PRINTING, true); JsonGeneratorFactory jgf = Json.createGeneratorFactory(properties); JsonGenerator jg = jgf.createGenerator(System.out); jg.writeStartObject() // { .write("name", "Jane Doe") // "name":"Jane Doe", .writeStartObject("address") // "address":{ .write("type", 1) // "type":1, .write("street", "1 A Street") // "street":"1 A Street", .writeNull("city") // "city":null, .write("verified", false) // "verified":false .writeEnd() // }, .writeStartArray("phone-numbers") // "phone-numbers":[ .writeStartObject() // { .write("number", "555-1111") // "number":"555-1111", .write("extension", "123") // "extension":"123" .writeEnd() // }, .writeStartObject() // { .write("number", "555-2222") // "number":"555-2222", .writeNull("extension") // "extension":null .writeEnd() // } .writeEnd() // ] .writeEnd() // } .close(); 

我的情况是我的项目使用不支持漂亮打印的遗留(非JSR)JSONparsing器。 但是,我需要制作漂亮的JSON样本。 只要您使用Java 7或更高版本,就可以不必添加任何额外的库:

 ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine scriptEngine = manager.getEngineByName("JavaScript"); scriptEngine.put("jsonString", jsonStringNoWhitespace); scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)"); String prettyPrintedJson = (String) scriptEngine.get("result"); 

在JSONLib中,你可以使用这个:

 String jsonTxt = JSONUtils.valueToString(json, 8, 4); 

从Javadoc :

在一行中:

 String niceFormattedJson = JsonWriter.formatJson(jsonString) 

json-io libray( https://github.com/jdereg/json-io )是一个小的(75K)库,没有其他的依赖关系。

除了漂亮的打印JSON之外,还可以将Java对象(整个Java对象图和循环)序列化为JSON,并将其读入。

现在可以通过JSONLib库来实现:

http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONObject.html

如果(且仅当)使用重载的toString(int indentationFactor)方法而不使用标准的toString()方法。

我已经在以下版本的API中validation了这一点:

 <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20140107</version> </dependency> 

遵循JSON-P 1.0规范( JSR-353 ),给定JsonStructureJsonObjectJsonArray )的JsonStructure解决scheme可能如下所示:

 import java.io.StringWriter; import java.util.HashMap; import java.util.Map; import javax.json.Json; import javax.json.JsonStructure; import javax.json.JsonWriter; import javax.json.JsonWriterFactory; import javax.json.stream.JsonGenerator; public class PrettyJson { private static JsonWriterFactory FACTORY_INSTANCE; public static String toString(final JsonStructure status) { final StringWriter stringWriter = new StringWriter(); final JsonWriter jsonWriter = getPrettyJsonWriterFactory() .createWriter(stringWriter); jsonWriter.write(status); jsonWriter.close(); return stringWriter.toString(); } private static JsonWriterFactory getPrettyJsonWriterFactory() { if (null == FACTORY_INSTANCE) { final Map<String, Object> properties = new HashMap<>(1); properties.put(JsonGenerator.PRETTY_PRINTING, true); FACTORY_INSTANCE = Json.createWriterFactory(properties); } return FACTORY_INSTANCE; } } 

你可以像下面一样使用Gson

 Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonString = gson.toJson(object); 

从后JSON漂亮打印使用Gson

或者,您可以像下面那样使用Jackson

 ObjectMapper mapper = new ObjectMapper(); String perttyStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); 

来自post漂亮打印JSON在Java(jackson)

希望这个帮助!

与jackson( com.fasterxml.jackson.core ):

 ObjectMapper mapper = new ObjectMapper(); System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject)) 

来自: 如何启用漂亮的打印JSON输出(jackson)

我知道这已经在答案中了,但是我想在这里单独写出来,因为有机会,你已经把Jackson当作依赖项了,所以你只需要额外的一行代码