乐趣区

java如何将json数据格式化输出到控制台

在做接口测试的过程中,大多数数据交互都使用 json 格式,但是在控制台输出 json 的效果远不如浏览器插件实现的漂亮。在找了一些资料后,决定自己写一个格式化输出 json 信息到控制台的方法,经过一些尝试已经完成。分享如下:

    /**
     * 输出 json
     *
     * @param jsonObject json 格式响应实体
     */
    public static JSONObject output(JSONObject jsonObject) {if (MapUtils.isEmpty(jsonObject)) {output("json 对象是空的!");
            return jsonObject;
        }
        String start = SourceCode.getManyString(SPACE_1, 4);
        String jsonStr = jsonObject.toString();// 先将 json 对象转化为 string 对象
        jsonStr = jsonStr.replaceAll("\\\\/", OR);
        int level = 0;// 用户标记层级
        StringBuffer jsonResultStr = new StringBuffer(">");// 新建 stringbuffer 对象,用户接收转化好的 string 字符串
        for (int i = 0; i < jsonStr.length(); i++) {// 循环遍历每一个字符
            char piece = jsonStr.charAt(i);// 获取当前字符
            // 如果上一个字符是断行,则在本行开始按照 level 数值添加标记符,排除第一行
            if (i != 0 && '\n' == jsonResultStr.charAt(jsonResultStr.length() - 1)) {for (int k = 0; k < level; k++) {jsonResultStr.append(start);
                }
            }
            switch (piece) {
                case ',':
                    // 如果是“,”,则断行
                    char last = jsonStr.charAt(i - 1);
                    if ("\"0123456789le]}".contains(last + EMPTY)) {jsonResultStr.append(piece + LINE);
                    } else {jsonResultStr.append(piece);
                    }
                    break;
                case '{':
                case '[':
                    // 如果字符是 { 或者 [,则断行,level 加 1
                    jsonResultStr.append(piece + LINE);
                    level++;
                    break;
                case '}':
                case ']':
                    // 如果是 } 或者 ],则断行,level 减 1
                    jsonResultStr.append(LINE);
                    level--;
                    for (int k = 0; k < level; k++) {jsonResultStr.append(start);
                    }
                    jsonResultStr.append(piece);
                    break;
                default:
                    jsonResultStr.append(piece);
                    break;
            }
        }
        output(LINE + "↘ ↘ ↘ ↘ ↘ ↘ ↘ ↘ json ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙" + LINE + jsonResultStr.toString().replaceAll(LINE, LINE + ">") + LINE + "↘ ↘ ↘ ↘ ↘ ↘ ↘ ↘ json ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙");
        return jsonObject;
    }
    

更新了输出显示效果:

备注:在 json 数据中存在“,”这种情况以及 value 非 string(数字和 null 或者科学技术法时)可能会存在一些显示异常,以及 value 值本身是一个 json 数据的字符串时候也会把 value 当做 json 来处理。总体来说够用,效果比较满意。

一起来~FunTester

往期文章精选

  1. java 一行代码打印心形
  2. Linux 性能监控软件 netdata 中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在 Linux 命令行界面愉快进行性能测试
  6. 图解 HTTP 脑图
  7. 写给所有人的编程思维
  8. 测试之 JVM 命令脑图

公众号地图

退出移动版