rest-assured的JsonPath使用方法总结

Posted lwjnicole

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rest-assured的JsonPath使用方法总结相关的知识,希望对你有一定的参考价值。

JsonPath对象解析Json格式的数据来说非常简单,比如有下面这样的Json数据:

 1 {"lotto":{
 2     "lottoId":5,
 3     "winning-numbers":[2,45,34,23,7,5,3],
 4     "winners":[{
 5       "winnerId":23,
 6       "numbers":[2,45,34,23,3,5]
 7     },{
 8       "winnerId":54,
 9       "numbers":[52,3,12,11,18,22]
10     }]
11   }
12 }

下面是一些简单的使用实例:

 1 //这里的lottoJson代表了上面所说的json数据
 2 JsonPath jsonPath = new JsonPath(lottoJson);
 3 
 4 // 获取lottoId
 5 int lottoId = jsonPath.getInt("lotto.lottoId");
 6 
 7 // 获取winning-numbers列表
 8 List<string> winningNumbers = jsonPath.get("lotto.winning-numbers");
 9 
10 // 下面的语句会返回一个list,list中包含23,54
11 List<integer> winningNumbers = jsonPath.get("lotto.winners.winnerId");

从上面的例子中可以看到所有的获取路径中我们都重复使用了lotto,为了避免这个问题,我们可以设置一个根路径(root path):

 1  //这里lottoJson代表上面的json数据
 2  JsonPath jsonPath = new JsonPath(lottoJson);
 3  //设置根路径
 4  jsonPath.setRoot("lotto");
 5 
 6 // 获取lottoId
 7  int lottoId = jsonPath.getInt("lottoId");
 8 
 9 //获取winning-numbers列表
10 List<string> winningNumbers = jsonPath.get("winning-numbers");
11 
12 // 下面的语句将返回一个list,list中包含23,54
13 List<integer> winningNumbers = jsonPath.get("lotto.winners.winnerId");

如果你只是对提取一个单一的值感兴趣,你还可以这样做:

1 // "from"是从JsonPath中静态导入的
2 int lottoId = from(lottoJson).getInt("lotto.lottoId");

你也可以做一些复杂的操作,比如求winners.numbers的和:

1 int sumOfWinningNumbers = from(lottoJson).
2                            getInt("lotto.winning-numbers.sum()");

或者是找出所有大于10并且winnerId=23的number:

1 // 返回结果是包含45,34 and 23的list
2 List<integer> numbers = from(lottoJson).getList(
3   "lotto.winners.find {it.winnerId == 23}.numbers.findAll {it > 10}",
4    Integer.class);

 

以上是关于rest-assured的JsonPath使用方法总结的主要内容,如果未能解决你的问题,请参考以下文章

rest-assured的对象映射(Object Mapping)

rest-assured的日志使用介绍

Rest-assured 写日志到 log4j

接口测试 rest-assured 使用指南

rest-assured之静态导入及简单使用实例

是否可以使用 Java Stream api 重写带有 Rest-Assured 请求尝试的 WHILE 循环