【发布时间】:2011-07-24 08:56:20
【问题描述】:
我想使用 Java 格式化一个包含 JSON 数据的字符串。有谁知道这方面的开源库。
【问题讨论】:
标签: java json string-formatting
我想使用 Java 格式化一个包含 JSON 数据的字符串。有谁知道这方面的开源库。
【问题讨论】:
标签: java json string-formatting
假设您从现有的 JSON 字符串开始,那么 Jackson 可以为您执行此操作:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
String originalJson = ...
JsonNode tree = objectMapper .readTree(originalJson);
String formattedJson = objectMapper.writeValueAsString(tree);
【讨论】:
杰克逊 2.6.1
String beautify(String json) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Object obj = mapper.readValue(json, Object.class);
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
}
pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>
Convert JSON String to Pretty Print JSON output using Jackson
【讨论】:
更新 skaffman 之前的回答,更新版本的 Jackson(我认为是 2+)。第二行代码现在是:
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
【讨论】:
我做了一个简单的代码可以做到这一点,你只需要创建一个新的类调用BeautifulJson并将它们全部粘贴进去。
public class BeautifulJson {
public static String beautiful(String input) {
int tabCount = 0;
StringBuilder inputBuilder = new StringBuilder();
char[] inputChar = input.toCharArray();
for (int i = 0; i < inputChar.length; i++) {
String charI = String.valueOf(inputChar[i]);
if (charI.equals("}") || charI.equals("]")) {
tabCount--;
if (!String.valueOf(inputChar[i - 1]).equals("[") && !String.valueOf(inputChar[i - 1]).equals("{"))
inputBuilder.append(newLine(tabCount));
}
inputBuilder.append(charI);
if (charI.equals("{") || charI.equals("[")) {
tabCount++;
if (String.valueOf(inputChar[i + 1]).equals("]") || String.valueOf(inputChar[i + 1]).equals("}"))
continue;
inputBuilder.append(newLine(tabCount));
}
if (charI.equals(",")) {
inputBuilder.append(newLine(tabCount));
}
}
return inputBuilder.toString();
}
private static String newLine(int tabCount) {
StringBuilder builder = new StringBuilder();
builder.append("\n");
for (int j = 0; j < tabCount; j++)
builder.append(" ");
return builder.toString();
}
}
要使用这个:
String beautifulJson = BeautifulJson.beautiful("JSON in string");
例子:
static String json = "{\"success\": true,\"metadata\": {\"transactionId\": 0,\"status_code\": 0},\"errors\": [{\"code\": \"string\",\"message\": \"string\"}]}";
public static void main(String[] args) {
//Original JSON
System.out.println(json);
//beautiful JSON
System.out.println(beautiful(json));
}
这是我关于堆栈溢出的第一篇文章 :)
【讨论】: