【问题标题】:JSON Beautifier Library for JavaJava 的 JSON 美化器库
【发布时间】:2011-07-24 08:56:20
【问题描述】:

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

【问题讨论】:

    标签: java json string-formatting


    【解决方案1】:

    假设您从现有的 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);
    

    【讨论】:

    • 使用较新版本 Jackson 的人,请查看 @H Mirza 的答案。
    【解决方案2】:

    杰克逊 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

    【讨论】:

      【解决方案3】:

      更新 skaffman 之前的回答,更新版本的 Jackson(我认为是 2+)。第二行代码现在是:

      objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
      

      【讨论】:

        【解决方案4】:

        我做了一个简单的代码可以做到这一点,你只需要创建一个新的类调用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));
        }
        

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

        【讨论】:

        • 它只会错过跳过值中的 {,},[,] 和逗号。
        猜你喜欢
        • 1970-01-01
        • 2020-06-11
        • 2013-03-13
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多