前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给JSONObject添加自定义遍历方法

给JSONObject添加自定义遍历方法

作者头像
FunTester
发布2021-11-04 11:28:11
1.9K0
发布2021-11-04 11:28:11
举报
文章被收录于专栏:FunTester

经过了Groovy动态添加方法和属性及Spock单测的铺垫,今天用fastjson为例,演示如何给JSONObject添加一个自定义的方法,来帮助提高编程效率。

需求

fastjsoncom.alibaba.fastjson.JSONObject其实并有直接给出遍历的方法,如果想在接口测试的过程中,需要打印JSON响应中的部分信息,都需要单独写一个for循环或者Lambda语法表达式,例如:

演示JSON数据

代码语言:javascript
复制
        def params = new JSONObject()
        params.code= 1
        params.msg= "FunTester"
        def data = new JSONObject()
        data.name = "张三"
        data.age = 22
        params.data = []
        params.data << data
        params.data << data.clone()
        params.data << data.clone()

打印内容:

代码语言:javascript
复制
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
>  {
>  ① . "msg":"FunTester",
>  ① . "code":1,
>  ① . "data":[
>  ② . . . {
>  ② . . . "name":"张三",
>  ② . . . "age":22
>  ① . },
>  ① . {
>  ② . . . "name":"张三",
>  ② . . . "age":22
>  ① . },
>  ① . {
>  ② . . . "name":"张三",
>  ② . . . "age":22
>  ② . . . }
>  ① . ]
>  }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~

直接实现输出方法

这里我们还是通过groovy.lang.MetaClass来实现。

代码语言:javascript
复制
        JSONObject.metaClass.fun = {
            def array = params.getJSONArray("data")
            array.each {
                sleep(1.0)
                output(Time.getNow(Time.DEFAULT_FORMAT.get()))
                output(it)
            }
        }

        params.fun()

控制台输出:

代码语言:javascript
复制
INFO-> main 当前用户:oker,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16
INFO-> main 2021-10-21 19:19:36
INFO-> main 
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
>  {
>  ① . "name":"张三",
>  ① . "age":22
>  }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
INFO-> main 2021-10-21 19:19:37
INFO-> main 
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
>  {
>  ① . "name":"张三",
>  ① . "age":22
>  }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
INFO-> main 2021-10-21 19:19:38
INFO-> main 
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
>  {
>  ① . "name":"张三",
>  ① . "age":22
>  }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~

Process finished with exit code 0

使用闭包灵活实现

这里我使用的是groovy.lang.Closure作为闭包的实现类,毕竟这个功能只能在Groovy脚本中实现。具体的文章有兴趣的可以翻一翻以前的文章。这次我用了两种闭包的实现方式,其中it关键字简直就是灵魂,非常推荐大家学Groovy。脚本代码如下:

代码语言:javascript
复制
        JSONObject.metaClass.fun2 = {f ->

            def array = params.getJSONArray("data")
            array.each {
                f(it)
            }
        }

        params.fun2({x -> output(x.get("name"))})
        params.fun2({output(it.get("age"))})

控制台输出:

代码语言:javascript
复制
INFO-> main 当前用户:oker,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16
INFO-> main 张三
INFO-> main 张三
INFO-> main 张三
INFO-> main 22
INFO-> main 22
INFO-> main 22

Process finished with exit code 0

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
    • 演示JSON数据
    • 直接实现输出方法
    • 使用闭包灵活实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档