写点什么

给 JSONObject 添加自定义遍历方法

用户头像
FunTester
关注
发布于: 刚刚

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

需求

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

演示 JSON 数据

        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()
复制代码


打印内容:


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

直接实现输出方法

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


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


控制台输出:


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

使用闭包灵活实现

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


        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"))})
复制代码


控制台输出:


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

Have Fun ~ Tester !

发布于: 刚刚阅读数: 2
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
给JSONObject添加自定义遍历方法