接口测试-多层嵌套响应处理-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));
}

总结

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

相关推荐
benchmark_cc5 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
IT_陈寒7 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala7 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
ikoala7 小时前
AI 写页面像说明书,修 Bug 像贴膏药?把这两句话写进 AGENTS.md
前端·javascript·ai编程
这个昵称不容易8 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长8 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
羲云网络8 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
去伪存真9 小时前
AI Agent Harness 深度测评与技术选型实战
前端·agent
文丑颜不良啊10 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼10 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发