当前位置: 首页 > news >正文

接口自动化入门 —— JSON中的万能密码--JSONPath解析!

1. JSONPath 的核心概念

JSONPath 是一种查询语言,用于从 JSON 数据中提取特定的字段或值。它的表达式语法类似于 XPath,支持多种操作符和函数,能够快速定位和提取数据。‍

图片

2. JSONPath 的基本语法

2.1 提取单个字段

语法:$..

示例:

{

  "store": {

    "book": [

      { "title": "Sword of Honour", "price": 12.99 },

      { "title": "Moby Dick", "price": 8.99 }

    ]

  }

}

提取书名:$.store.book[0].title。

2.2 提取数组中的所有元素

语法:$..[*]

示例:

提取所有书名:$.store.book[*].title。

2.3 过滤条件

语法:$..[?(@.)]

示例:

提取价格大于 10 的书名:$.store.book[?(@.price > 10)].title。

2.4 递归查询

语法:$..

示例:

查询所有层级中的 name 字段:$..name。‍

图片

3. JSONPath 的应用场景

3.1 提取指定字段

场景:从学生信息中提取名字和数学成绩。

JSON 数据:

{

"student": {

    "name": "John Doe",

    "scores": {

      "math": 85,

      "english": 90

    }

  }

}

JSONPath 表达式:

提取名字:$.student.name

提取数学成绩:$.student.scores.math。

3.2 提取数组中的元素

场景:从多个学生信息中提取所有数学成绩。

JSON 数据:

{

  "students": [

    { "name": "John Doe", "scores": { "math": 85 } },

    { "name": "Jane Smith", "scores": { "math": 92 } }

  ]

}

JSONPath 表达式:

提取所有数学成绩:$.students[*].scores.math。

3.3 提取嵌套数组中的特定元素

场景:从订单信息中提取价格大于 50 的商品名称。

JSON 数据:

{

  "orders": [

    { "items": [ { "name": "item1", "price": 45 }, { "name": "item2", "price": 55 } ] },

    { "items": [ { "name": "item3", "price": 60 } ] }

  ]

}

JSONPath 表达式:

提取价格大于 50 的商品名称:$.orders[*].items[?(@.price > 50)].name。

3.4 提取嵌套对象中的某些属性

场景:从图书信息中提取书名和出版年份。

JSON 数据:

{

  "library": {

    "books": [

      { "title": "Book A", "year": 2020 },

      { "title": "Book B", "year": 2019 }

    ]

  }

}

JSONPath 表达式:

提取书名和出版年份:$.library.books[*]['title', 'year']。‍

图片

4. JSONPath 在接口测试中的应用

4.1 提取接口响应中的数据

示例:从登录接口的响应中提取 Token。

{

  "status": "success",

  "data": {

    "token": "abc123"

  }

}

JSONPath 表达式:

提取 Token:$.data.token。

4.2 验证接口响应

示例:验证用户信息接口返回的用户名是否正确。

{

  "profile": {

    "name": "admin",

    "email": "admin@example.com"

  }

}

JSONPath 表达式:

提取用户名:$.profile.name。‍

图片

5. JSONPath 的工具支持

Python:使用 jsonpath-ng 或 jsonpath 库。

import jsonpath

data = {"store": {"book": [{"title": "Sword of Honour"}]}}

result = jsonpath.jsonpath(data, "$.store.book[*].title")

print(result)  # ['Sword of Honour']

Java:使用 com.jayway.jsonpath 库。

import com.jayway.jsonpath.JsonPath;

String json = "{...}";

Object result = JsonPath.read(json, "$.store.book[*].title");

System.out.println(result);

JavaScript:使用 jsonpath-plus。

const jsonpath = require('jsonpath-plus');

const data = { store: { book: [{ title: "Sword of Honour" }] } };

const result = jsonpath({ path: '$.store.book[*].title', json: data });

console.log(result);  // ['Sword of Honour']‍

图片

6. 总结

JSONPath 是一种强大的工具,能够快速从复杂的 JSON 数据中提取所需信息。它在接口自动化测试中具有广泛的应用,例如提取接口响应中的关键数据、验证接口返回值是否符合预期等。通过掌握 JSONPath 的基本语法和应用场景,你可以更高效地处理 JSON 数据,提升接口测试的效率和准确性。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

  • PyTorch 入门学习
  • 鸿蒙开发者社区资源的重要性
  • Smart Time Plus smarttimeplus-MySQLConnection SQL注入漏洞(CVE-2024-53544)
  • 快手__NS_sig3数据分析
  • c++介绍智能指针 十二(2)
  • 【C++】 —— 笔试刷题day_4
  • 【Mac 系统卸载 Go 语言完整指南】
  • 【微知】plantuml在泳道图中如何将多个泳道框起来分组并且设置颜色?(box “浏览器“ #LightGreen endbox)
  • 重生之我在学Vue--第11天 Vue 3 高级特性
  • Mybatis语法bug
  • 吴恩达机器学习笔记复盘(三)Jupyter NoteBook
  • Adobe Acrobat Pro setting
  • 第3关:完美综合运算式
  • 如何修改 Ubuntu 软件源(镜像源)
  • Javascript进阶
  • Kotlin中使用DataBinding绑定RecyclerView并数据两列显示
  • 点云大数据在低空经济中的应用:三维激光雷达技术探索
  • 12.16some pro about py model
  • QT中的布局管理
  • 火绒终端安全管理系统V2.0--分层防御之内容过滤层
  • 中国与东盟十国全面完成中国—东盟自贸区3.0版谈判
  • 管教打骂9岁儿子致其死亡,青岛一男子被刑拘
  • 梅花奖在上海丨好戏在上海不缺观众,冷门剧种叫好又叫座
  • 凤阳文旅局长回应鼓楼瓦片脱落:楼宇是否属于文物?施工经费用在何处?
  • 顶刊论文现“飙脏话辱骂第二作者”,期刊回应:正积极调查
  • 中国海警就菲向非法“坐滩”仁爱礁军舰运补发表谈话