接口测试-多层嵌套响应处理-JSONPath使用(Java版)

文章目录

  • [1. JSONPath 简介](#1. JSONPath 简介)
  • [2. JSONPath 语法使用](#2. JSONPath 语法使用)
  • [3. JSONPath 结合 代码使用](#3. JSONPath 结合 代码使用)
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

1. JSONPath 简介

  1. 在 JSON 数据中定位和提取特定信息的查询语言。
  2. JSONPath 使用类似于 XPath 的语法,使用路径表达式从 JSON 数据中选择和提取数据。
  3. 相比于传统的提取方式,更加灵活,并且支持定制化。

2. JSONPath 语法使用

  1. 语法知识。
  2. 第三方库调用。
符号 描述
$ 查询的根节点对象,用于表示一个 json 数据,可以是数组或对象
@ 过滤器(filter predicate)处理的当前节点对象
* 通配符
. 获取子节点
. . 递归搜索,筛选所有符合条件的节点; 类似获取子孙节点
?() 过滤器表达式,筛选操作
[start:end] 数组片段,区间为[start,end),不包含 end
[A]或[A,B] 迭代器下标,表示一个或多个数组下标

语法使用示例:

xml 复制代码
$ : 获取Json对象
$..book : 获取根节点下所有book节点
$..book[*]
// 获取0到2下标的书,下标左闭右开[0,3)
$..book[0:3]
// 获取下标0和下标2的书
$..book[0,2]
//获取价格==8.95的书籍
$..book[?(@.price==8.95)]

获取所有书籍的作者

xml 复制代码
$.store.book[*].author
$..book..author

获取所有作者

xml 复制代码
$..author

获取 store 下面的所有内容

xml 复制代码
$.store
$.store.*

获取所有的价格

xml 复制代码
$..price
$.store..price

获取第三本书

xml 复制代码
$..book[2]

获取所有包含 isbn 的书籍

包含之类-过滤

xml 复制代码
$..book[?(@.isbn)]

获取所有价格小于 10 的书

xml 复制代码
$..book[?(@.price<10)]

获取所有书籍的数量

jsonpath可以配合函数使用

xml 复制代码
$..book.length

3. JSONPath 结合 代码使用

环境安装:

python环境配置: pip install jsonpath

xml 复制代码
jsonpath.jsonpath(源数据对象, jsonpath表达式)

java环境配置:

xml 复制代码
<properties>
    <json-path.version>2.8.0</json-path.version>
</properties>
<dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
      <version>${json-path.version}</version>
</dependency>

Java代码示例:

方式一获取:每次获取信息调用

JsonPath.read(responseBody, "$.data");

参数1:响应体;

参数2:JsonPath语法

java 复制代码
/**
 * Jsonpath获取响应体信息
 *  每次调用JsonPath.read()方法获取
 */
@Test
void jsonPathTest() {
    String jsonData = "{\"username\":\"zs\",\"password\":\"test123\",\"code\":\"\"}";
    String responseBody = given()
        .body(jsonData)
    .when()
        .post("https://httpbin.com/post")
    .then()
        .log().all()
        //获取响应体信息
        .extract().response().getBody()
        //转为String格式
        .asString();
    //获取code
    System.out.println("-------------响应体信息-----------");
    System.out.println(responseBody);
    System.out.println("----------提取data--------------");
    String data = JsonPath.read(responseBody, "$.data");
    System.out.println(data);
    System.out.println("----------提取code--------------");
    ArrayList<String> code = JsonPath.read(responseBody, "$..code");
    System.out.println(code);
}

Java代码示例2:

方式2获取: 使用JsonPath.parse(responseBody)一次调用JsonPath方法,后续直接使用read()方法获取想要的数据;

java 复制代码
//1.获取响应体
DocumentContext context = JsonPath.parse(responseBody);
//2.直接使用,参数是:jsonpath语法获取
String url = context.read("$.url");
java 复制代码
/**
 * jsonpath获取响应体信息
 *  调用JsonPath.parse()方法-只调用一次JsonPath方法
 */
@Test
void jsonPathTest2() {
    String jsonData = "{\"username\":\"zs\",\"password\":\"test123\",\"code\":\"\"}";
    String responseBody = given()
        .body(jsonData)
    .when()
        .post("https://httpbin.com/post")
    .then()
        .log().all()
        //获取响应体信息
        .extract().response().getBody()
        //转为String格式
        .asString();
    DocumentContext context = JsonPath.parse(responseBody);
    System.out.println("----------提取data--------------");
    String url = context.read("$.url");
    System.out.println(url);
    System.out.println("----------提取code--------------");
    ArrayList<String> codeList = context.read("$..code");
    System.out.println(codeList);
    assertEquals("",codeList.get(0));
}

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
寻星探路6 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
崔庆才丨静觅8 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
曹牧9 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
passerby60619 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了9 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅9 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
ValhallaCoder9 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
崔庆才丨静觅9 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法9 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate