在JAVA中把JSON数据格式化输出到控制台

本文详细解析了一段用于格式化JSON字符串的Java代码,通过逐字符读取并根据JSON语法调整缩进,实现将原始JSON字符串转换为易读的多行格式。代码处理了包括{

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.test.jsonUtility;
/** * @author 
    * @date 创建时间:2017年10月17日 上午11:11:42
    * @version 1.0
    * @parameter
    * @since 
    * @return
    * @throws */
 
public class Json {
    private static String getLevelStr(int level) {
        StringBuffer levelStr = new StringBuffer();
        for (int levelI = 0; levelI < level; levelI++) {
            levelStr.append("\t");
        }
        return levelStr.toString();
    }
    public static void main(String[] args) {
        //json 字符串
        String s = "{\"code\":10000,\"msg\":null,\"data\":{\"id\":\"7aa0eb56-1026-4497-a42e-4c39f5e3dcf1\",\"topicId\":\"0876ab84-a478-417b-91bc-849843c191a5\",\"title\":null,\"commentId\":null,\"content\":\"" +
                "开发者平台自动化测试:针对帖子发表评论" +
                "\",\"images\":\"\",\"time\":\"2017-10-15 18:09:56\",\"userId\":\"61028f94-de92-4c65-aad3-2fc8614e1d34\",\"userName\":\"devautotest\",\"commentNum\":0,\"status\":0}}";
        int level = 0;
        //存放格式化的json字符串
        StringBuffer jsonForMatStr = new StringBuffer();
        for(int index=0;index<s.length();index++)//将字符串中的字符逐个按行输出
        {
            //获取s中的每个字符
            char c = s.charAt(index);
//          System.out.println(s.charAt(index));
             
            //level大于0并且jsonForMatStr中的最后一个字符为\n,jsonForMatStr加入\t
            if (level > 0 && '\n' == jsonForMatStr.charAt(jsonForMatStr.length() - 1)) {
                jsonForMatStr.append(getLevelStr(level));
//                System.out.println("123"+jsonForMatStr);
            }
            //遇到"{"和"["要增加空格和换行,遇到"}"和"]"要减少空格,以对应,遇到","要换行
            switch (c) {
            case '{':
            case '[':
                jsonForMatStr.append(c + "\n");
                level++;
                break;
            case ',':
                jsonForMatStr.append(c + "\n");            
                break;
            case '}':
            case ']':
                jsonForMatStr.append("\n");
                level--;
                jsonForMatStr.append(getLevelStr(level));
                jsonForMatStr.append(c);
                break;
            default:
                jsonForMatStr.append(c);
                break;
            }
        }
        System.out.println(jsonForMatStr);
 
    }
     
}

以上代码执行结果如下图显示

 

转载自: https://www.cnblogs.com/hong0632/p/7681867.html

### Java格式化 JSON 数据的方法 在 Java 中,可以通过多种方式实现 JSON 数据格式化输出。以下是几种常见的方法及其具体实现: #### 使用 Jackson 库 Jackson 是一种流行的 JSON 处理库,在 Java 中广泛用于序列化和反序列化操作。通过 `ObjectMapper` 类可以轻松完成 JSON格式化。 ```java import com.fasterxml.jackson.databind.ObjectMapper; public class JsonFormatter { public static void main(String[] args) throws Exception { String jsonData = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; ObjectMapper objectMapper = new ObjectMapper(); Object jsonObject = objectMapper.readValue(jsonData, Object.class); String prettyPrintJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject); System.out.println(prettyPrintJson); } } ``` 这种方法利用了 Jackson 提供的默认漂亮打印功能来格式化 JSON 输出[^1]。 --- #### 使用 GSON 库 Google 开发的 GSON 库也是一种简单而强大的工具,支持将 JSON 字符串换为易于阅读的形式。 ```java import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class JsonFormatter { public static void main(String[] args) { String jsonData = "{\"FB\":\"FKSQ\",\"FA\":\"2024-03-13\",\"FC\":\"100\"}"; Gson gson = new GsonBuilder().setPrettyPrinting().create(); String formattedJson = gson.toJson(gson.fromJson(jsonData, Object.class)); System.out.println(formattedJson); } } ``` 此代码片段展示了如何使用 GSON 来格式化 JSON 字符串,并保持键值对原有的顺序[^3]。 --- #### 手动实现 JSON 格式化 如果不想依赖第三方库,也可以手动编写逻辑来格式化 JSON 数据。这种方式虽然复杂度较高,但在某些场景下可能更灵活。 ```java public class JsonFormatter { public static void main(String[] args) { String jsonData = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; String formattedJson = formatJson(jsonData); System.out.println(formattedJson); } private static String formatJson(String json) { StringBuilder sb = new StringBuilder(); int indentLevel = 0; boolean inString = false; for (char c : json.toCharArray()) { switch (c) { case '{': if (!inString) { sb.append(c).append("\n"); indentLevel++; appendIndent(sb, indentLevel); } else { sb.append(c); } break; case '}': if (!inString) { indentLevel--; appendIndent(sb, indentLevel); sb.append(c).append("\n"); } else { sb.append(c); } break; case '[': if (!inString) { sb.append(c).append("\n"); indentLevel++; appendIndent(sb, indentLevel); } else { sb.append(c); } break; case ']': if (!inString) { indentLevel--; appendIndent(sb, indentLevel); sb.append(c).append("\n"); } else { sb.append(c); } break; case ',': if (!inString) { sb.append(c).append("\n"); appendIndent(sb, indentLevel); } else { sb.append(c); } break; case '"': sb.append(c); inString = !inString; break; default: sb.append(c); } } return sb.toString(); } private static void appendIndent(StringBuilder sb, int level) { for (int i = 0; i < level; i++) { sb.append(" "); } } } ``` 这段代码实现了基本的手动 JSON 格式化逻辑,适用于简单的 JSON 结构[^5]。 --- #### 将格式化JSON 存储到文件中 除了控制台输出外,还可以将格式化后的 JSON 数据保存至文件中。 ```java import java.io.FileWriter; import java.io.IOException; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; public class JsonToFile { public static void main(String[] args) { String jsonData = "{\"name\":\"Alice\", \"age\":25, \"city\":\"Los Angeles\"}"; try (FileWriter file = new FileWriter("output.json")) { String prettyJson = JSON.toJSONString(JSON.parse(jsonData), SerializerFeature.PrettyFormat); file.write(prettyJson); } catch (IOException e) { e.printStackTrace(); } } } ``` 这里采用了 Alibaba FastJSON 工具包的功能,将 JSON 换为漂亮的格式并写入文件[^4]。 --- ### 总结 以上介绍了四种不同的方法来格式化 JSON 数据:基于 Jackson、GSON 和手写的解决方案以及将结果保存到文件的技术。每种方案都有其适用范围和优缺点,开发者可以根据实际需求选择合适的工具或技术栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值