原本想使用API帮我写一篇关于JSONPATH的文章,但是AI写出来的文章有不少错误,所以本篇JSONpath的内容是基于AI写的文章的基础之上做的修改。
JSONPATH是一种路径表达式语言(访问和操作JSON数据的语言),用于查询特定的JSON格式数据。它提供了一种简单、有效的方法来定位JSON文档中的元素,并支持基本的查询、筛选和操作。它类似于XPath,但是针对JSON对象而不是XML文档。它支持选择器、过滤器和函数等功能,能够方便地从JSON数据中提取所需信息。
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在本文中,我们将深入了解JSONPATH的语法和用法和工作原理,以及如何使用它来处理JSON数据。
注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
1. 语法
JSONPATH的语法非常简单和直观。它使用点号(.)和方括号([])来访问JSON对象的属性和数组元素。下面是一些常用的JSONPATH语法:
- $:根节点,也是所有jsonpath表达式的开始
- .:访问属性,表示获取子节点
- ..: 表示获取所有符合条件的内容
- []:访问数组元素,表示迭代器的标示(可以用于处理下标等情况)
- [,] 表示多个结果的选择
- *:通配符,匹配任何属性或数组元素,代表所有的元素节点
- @:当前节点
- ?():表示过滤操作
- $.property:访问JSON对象的属性值。例如,$表示JSON根对象,$.name表示根对象的name属性值。
- $[index]:访问JSON数组的元素值。例如,$[0]表示数组的第一个元素。
- $.property[index]:访问JSON对象中的数组元素。例如,$.students[0]表示对象的students属性中的第一个元素。
- $.property[*]:访问JSON对象中的所有数组元素。例如,$.students[*]表示对象的students属性中的所有元素。
- $.property.*:访问JSON对象中的所有子属性。例如,$.student.*表示对象的student属性中的所有子属性。
- $.property1.property2:访问JSON对象中的嵌套属性。例如,$.student.name表示对象的student属性中的name属性值。
2. 用法
JSONPATH可以用于许多场合,例如:
- 在JavaScript中访问和操作JSON数据。
- 在REST API中过滤和排序JSON数据。
- 在测试框架中验证JSON数据。
如果要基于JsonPath来处理json数据,就一定要去同步处理list。JsonPath定义中,如果表达式出现错误,则会返回False(布尔类型的值),JsonPath要么返回False,要么返回list。
下面是一些常见的JSONPATH用法及示例:
示例1:获取JSON对象中的某个属性值
例如,我们有以下JSON数据:
{
"name": "John",
"age": 30
}
要获取name属性的值,可以使用JSONPATH表达式$.name。
示例2:获取JSON数组中的某个元素
例如,我们有以下JSON数据:
{
"students": [
{
"name": "John",
"age": 30
},
{
"name": "Mary",
"age": 25
}
]
}
要获取数组中的第一个元素,可以使用JSONPATH表达式$.students[0]。
示例3:使用通配符*获取JSON数组中的元素
例如,假设我们有以下JSON数据:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip": "12345"
},
"phoneNumbers": [
{
"type": "home",
"number": "555-1234"
},
{
"type": "work",
"number": "555-5678"
}
]
}
- $.name:访问根节点下的name属性
- $.address.city:访问根节点下的address属性下的city属性
- $.phoneNumbers[0].number:访问根节点下的phoneNumbers数组的第一个元素的number属性
- $.phoneNumbers[*].type:访问根节点下的phoneNumbers数组的所有元素的type属性
JSONPATH的过滤器
JSONPATH还支持使用过滤器来对JSON数据进行更精细的查询和过滤。过滤器使用方括号([])中的表达式来指定要过滤的条件。下面是一些常见的过滤器:
- ==:等于
- !=:不等于
- <:小于
- <=:小于或等于
- >:大于
- >=:大于或等于
- =~:正则表达式匹配
- !~:不匹配正则表达式
示例4:过滤JSON数组中的元素
例如,我们可以使用以下JSONPATH来查找年龄大于25岁的人的姓名:
$.name[?(@.age > 25)]
这里,我们使用了过滤器[?(@.age > 25)]来指定条件。它将返回一个包含所有年龄大于25岁的人的姓名的数组。
JSONPATH的高级用法
JSONPATH还支持一些高级用法,例如:
- 使用逗号分隔的表达式来访问多个属性或数组元素
- 使用括号来指定优先级
- 使用通配符来访问多个层级的属性或数组元素
- 使用函数来处理数据,如min、max、sum、avg、length等
示例4:可以使用以下JSONPATH来计算所有电话号码的长度之和
$..phoneNumbers.*.number | length(@)
这里,我们使用了通配符$..phoneNumbers.*.number来访问所有电话号码,然后使用函数length来计算它们的长度之和。注意,我们使用了管道符号(|)来将结果传递给函数length。
总结
JSONPATH是一种非常强大的语言,可以用于查询和过滤JSON数据。它支持访问属性和数组元素,使用过滤器进行条件查询,以及使用函数进行数据处理。了解JSONPATH的基本语法和高级用法是处理JSON数据的关键。
微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。