专栏首页FunTester将json数据格式化输出到控制台

将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(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • json对象基本操作--视频讲解

    经小伙伴的提醒,决定插播一期json对象基本操作的视频。由于我录视频没有很充分的前期准备,因为太费时间了,所以都是想到什么内容,打个腹稿,准备一下设备就开始喷了...

    FunTester
  • 用Groovy处理JMeter断言和日志

    首先说明一下,我并不擅长jmeter,因为我基本不用这个,关于jmeter设置的疑问可以多去搜索引擎求助。本篇文章内容主要是自己在协助同事的时候一点点实践,分享...

    FunTester
  • Selenium 4.0 Alpha更新日志

    早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Sel...

    FunTester
  • Electron 应用的流水线设计

    Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。

    LinuxSuRen
  • 网站被植入Webshell的解决方案

    从字面上理解,”Web”指需要服务器开放Web服务,”shell”指取得对服务器的某种程度的操作权限。Webshell指匿名用户(入侵者)通过网站端口,获取网站...

    用户2202688
  • Numpy统计计算、数组比较,看这篇就够了

    如上述例子所示,axis = 1计算的是行的和,结果以列的形式展示。axis = 0计算的是列的和,结果以行的形式展示。

    华章科技
  • Python之pygame学习键盘事件操作(9)

    pygame中事件模块是pygame.event,官方说法是用于与事件和队列进行交互。

    萌海无涯
  • go语言的指针

    在学习go语言的时候,谈到了指针。之前很害怕指针,因为在传说中,指针这玩意儿据说狠不好弄,且有很多程序员都死在这上面。可是,这毕竟是go语言借鉴C语言为了提升速...

    李海彬
  • 一起来学演化计算-matlab基本函数randperm end数组索引

    对于p = randperm(n,k), p包含k个唯一值。randperm执行 k-permutations(不替换抽样)。要允许输出中的重复值(替换采样),...

    DrawSky
  • Python操作符

    py3study

扫码关注云+社区

领取腾讯云代金券