Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Java的JSON美化器库_Java_Json_String Formatting - Fatal编程技术网

用于Java的JSON美化器库

用于Java的JSON美化器库,java,json,string-formatting,Java,Json,String Formatting,我想使用Java格式化包含JSON数据的字符串。有人知道这方面的开源库吗。假设您从一个现有的JSON字符串开始,那么可以为您执行以下操作: ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); String originalJson = ... JsonNode tree = objectMapper .re

我想使用Java格式化包含JSON数据的字符串。有人知道这方面的开源库吗。

假设您从一个现有的JSON字符串开始,那么可以为您执行以下操作:

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>

com.fasterxml.jackson.core

用更新版本的杰克逊(我想是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();
    }
}

例如:

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));
}

这是我关于堆栈溢出的第一篇文章:)

如果有人使用较新版本的Jackson,请检查@H Mirza的答案。它只遗漏了跳过值中的{、}、[、]和逗号。
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));
}