JsonPath表达式

JsonPath表达式

JsonPath是一种用于查询JSON文档的语言,其语法和用途类似于XPath在XML文档中的应用。JsonPath提供了一种简洁而强大的方式,用于从复杂的JSON结构中提取和定位所需的数据。以下是对JsonPath表达式的详细介绍。

基本语法

  • 根元素
    使用符号$表示JSON文档的根元素。例如,$代表整个JSON文档。
  • 对象属性
    使用.符号来选择对象的属性。例如,$.name表示JSON中名为name的属性。
  • 数组索引
    使用方括号[]来表示数组索引。例如,$.students[0]表示JSON中students数组的第一个元素。需要注意的是,JsonPath的数组索引是从0开始的,这与XPath从1开始不同。
  • 通配符
    使用*表示匹配任意属性或元素。例如,$.students[*]表示JSON中所有的students属性,而$.*表示根元素下的所有属性。
  • 多个路径表达式
    使用逗号,表示多个路径表达式的组合。例如,$.students[0].name, $.students[1].age表示JSON中第一个学生的姓名和第二个学生的年龄。
  • 过滤表达式
    使用条件表达式来过滤结果。例如,$.students[?(@.age > 18)]表示JSON中年龄大于18岁的学生。

示例解析

假设有以下JSON文件内容:

{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99,
        "isbn": "0-553-21311-3"
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
  1. 提取第一个书的标题
    • 表达式$.store.book[0].title
    • 结果"Sayings of the Century"
  2. 提取所有书的作者
    • 表达式$.store.book[*].author
    • 结果["Nigel Rees", "Evelyn Waugh"]
  3. 提取价格大于10的书
    • 表达式$.store.book[?(@.price > 10)]
    • 结果[{"category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99, "isbn": "0-553-21311-3"}]
  4. 提取所有价格
    • 表达式$..price
    • 结果[8.95, 12.99, 19.95]

高级用法

  1. 范围表达式
    • 选择特定范围内的数组元素。例如,$.store.book[0:2]表示选择第一个到第二个(不包括第三个)元素。
  2. 操作符和正则表达式
    • JsonPath支持使用操作符进行复杂的比较和运算。例如,$.key[?(@.value > 10 && @.value < 20)]选择值在10到20之间的元素。
    • 还可以使用正则表达式进行匹配。例如,$.key[?(@.name =~ /pattern/)]选择name符合正则表达式pattern的元素。
posted @ 2024-12-10 17:52  测试小罡  阅读(16)  评论(0编辑  收藏  举报