mty*_*urt 20 java json pretty-print jackson
如何让Jackson的build()方法完美打印其JSON输出?这是一个漂亮打印丑陋形式的JSON代码的示例.我需要使用JSON代码的漂亮版本然后将其转移到丑陋的fom.怎么做到呢?我需要转换这个:
{
"one" : "AAA",
"two" : [ "BBB", "CCC" ],
"three" : {
"four" : "DDD",
"five" : [ "EEE", "FFF" ]
}
}
Run Code Online (Sandbox Code Playgroud)
对此:
{"one":"AAA","two":["BBB","CCC"],"three":{"four":"DDD","five":["EEE","FFF"]}}
Run Code Online (Sandbox Code Playgroud)
我试图删除'\n','\ t'和''字符; 但是值中可能有一些这样的字符,所以我不能这样做.还有什么可以做的?
Bra*_*rad 19
Jackson允许您从JSON字符串中读取,因此请将漂亮打印的字符串读回Jackson,然后再次输出,并禁用漂亮打印.
简单的例子
String prettyJsonString = "{ \"Hello\" : \"world\"}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readValue(prettyJsonString, JsonNode.class);
System.out.println(jsonNode.toString());
Run Code Online (Sandbox Code Playgroud)
需要
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
安全的方法是使用 JsonNode API 读取数据,然后再次将其写出,而不启用漂亮的打印机。
ObjectMapper m = new ObjectMapper();
JsonNode rootNode = m.readTree(payload);
String compressed = rootNode.toString();
Run Code Online (Sandbox Code Playgroud)
如果对象很大,Streaming API可以提供帮助。
如果您使用此模式,则使用正则表达式也可以工作:\s*\n\s*
这不会创建最紧凑的形式(即元素之间仍然有一些空格),但如果您已经将 JSON 作为字符串,那么这是一个便宜的解决方案。此模式安全的原因是新行在 String 值中无效(必须使用 转义\n),因此您可以安全地删除它们周围的空格。
Jackosn-core是一种漂亮打印 json 的方法。您可以在这里阅读答案/sf/answers/852194101/
您还可以使用org.json库,这是一个非常简单但标准的 java json 库。在这里开源代码 -> stleary/JSON-java。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
String payload = "{\n" +
" \"fact1\": \"Java is verbose.\", \n" +
" \"fact2\" : \"C has pointers\"\n" +
"}";
System.out.println(new JSONObject(payload));
Run Code Online (Sandbox Code Playgroud)
{"fact2":"C has pointers","fact1":"Java is verbose."}您将在一行中获得紧凑的 json 。
使用流API,您可以使用JsonGenerator.copyCurrentEvent()您想要的任何漂亮打印轻松地重新输出令牌流,包括默认的无空格; 这样可以避免在内存中缓冲整个文档并为文档构建树.
// source and out can be streams, readers/writers, etc.
String source = " { \"hello\" : \" world \" } ";
StringWriter out = new StringWriter();
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(source);
try (JsonGenerator gen = factory.createGenerator(out)) {
while (parser.nextToken() != null) {
gen.copyCurrentEvent(parser);
}
}
System.out.println(out.getBuffer().toString()); // {"hello":" world "}
Run Code Online (Sandbox Code Playgroud)
您可以使用相同的方法以流式方式打印JSON文档:
// reindent
gen.setPrettyPrinter(new DefaultPrettyPrinter());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22208 次 |
| 最近记录: |