• 给JSONObject添加自定义遍历方法


    经过了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.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。脚本代码如下:

            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.16
    INFO-> main 张三
    INFO-> main 张三
    INFO-> main 张三
    INFO-> main 22
    INFO-> main 22
    INFO-> main 22
    
    Process finished with exit code 0
    
    

    Have Fun ~ Tester !

  • 相关阅读:
    SCM Introduction
    upper lower capitalize and title
    isinstance
    splitlines
    使用 UITableView 创建表格应用演练(4)——自定义单元格
    高性能网站的十四条黄金法则
    javascript设计模式继承(上)
    这些年,我收集的JavaScript代码(一)
    ObjectiveC语法之KVO的使用
    面试中的Singleton
  • 原文地址:https://www.cnblogs.com/FunTester/p/15476186.html
Copyright © 2020-2023  润新知