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

【JsonPath】JsonPath常用示例

文章目录

    • 一. jsonpath语法
      • 1. 操作符
      • 2. 函数
      • 3. 过滤器
    • 二.实例说明
      • 1. 常用示例
      • 2. 实际中的应用场景示例

参考:https://gotest.hz.netease.com/doc/jie-kou-ce-shi/xin-zeng-yong-li/can-shu-xiao-yan/jsonpi-pei/jsonpathyu-fa.html

一. jsonpath语法


1. 操作符

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

2. 函数

可以在JsonPath表达式执行后进行调用,其输入值为表达式的结果。

名称描述
min()获取数值类型数组的最小值
max()获取数值类型数组的最大值
length()获取数值类型数组的长度,例如$.data.length()

3. 过滤器

过滤器是用于过滤数组的逻辑表达式。

操作符描述
==等于
!=不等于
<小于
=~判断是否符合正则表达式,例如[?(@.name =~ /foo.*?/i)]
in所属符号,例如[?(@.type in [“小雨”,“中到大雨”])]
nin排除符号

二.实例说明

1. 常用示例

BODY
{
   "code" : 200,
   "msg" : "成功!",
   "data" : {
      "yesterday" : {
         "date" : "13日星期一",
         "high" : "高温 23℃",
         "fx" : "东北风",
         "low" : "低温 18℃",
         "fl" : "<![CDATA[3-4级]]>",
         "type" : "小雨"
      },
      "city" : "杭州",
      "aqi" : null,
      "forecast" : [
        
         {
            "date" : "17日星期五",
            "high" : "30",
            "fengli" : "<![CDATA[<3级]]>",
            "low" : "22",
            "fengxiang" : "无持续风向",
            "type" : "小雨"
         },
         {
            "date" : "18日星期六",
            "high" : "33",
            "fengli" : "<![CDATA[<3级]]>",
            "low" : "19,
            "fengxiang" : "无持续风向",
            "type" : "多云"
         }
      ],
      "ganmao" : "各项气象条件适宜,无明显降温过程,发生感冒机率较低。",
      "wendu" : "21"
   }
}
含义表达式获取值
获取 data.forecast[0] 对象中 position_name 值。从根元素 $ 开始,经过 data 对象,进入 forecast 数组的第一个元素(索引为 0),最终提取 position_name 属性的值。
$.data.forecast[0].position_name
滨江
使用迭代器,获取 data 中 forecast 数组中所有 aqi 的值。从根元素开始,通过 data 对象找到 forecast 数组,使用 [*] 对数组内所有元素进行操作,提取 aqi 属性的值。
$.data.forecast[*].aqi
[62,68]
使用迭代器,获取 forecast 数组中所有的 aqi 值大于等于 60 的 primary_pollutant 值。在整个 JSON 文档中查找 forecast 元素,使用 [?(@.aqi >= 60)] 筛选出 aqi 大于等于 60 的元素,再提取这些元素的 primary_pollutant 属性的值。
$..forecast[?(@.aqi >= 60)].primary_pollutant
[‘null’,‘null’]
使用迭代器,获取 data 中 forecast 数组中 aqi 的第一个值。先通过 $.data.forecast[*].aqi 获取 forecast 数组内元素的 aqi 值,再用 [0] 取第一个值。
{$.data.forecast[*].aqi}[0]
62
获取 data 中 forecast 数组中 level 等于"良"对象,并获取该对象中 pm25 的值。从 data.forecast 数组中筛选出 level 属性为 "良" 的元素,提取这些元素的 pm25 属性的值。
$.data.forecast[?(@.level=="良")].pm25
[43]
获取 data 中 forecast 数组中 level 等于“良”且 aqi 等于 62 的所有对象,并获取该对象中 pm10 的值。从 data.forecast 数组中筛选出 level 属性为 "良" 且 aqi 属性为 62 的元素,提取这些元素的 pm10 属性的值。
$.data.forecast[?((@.level=="良")&&(@.aqi==62))].pm10
[73]
获取 data 中 forecast 数组中 aqi 大于 65 的所有对象,并获取该对象中 position_name 值。从 data.forecast 数组中筛选出 aqi 属性大于 65 的元素,提取这些元素的 position_name 属性的值。
$.data.forecast[?(@.aqi>65)].position_name
[“西溪”]

2. 实际中的应用场景示例

  1. 获取数组对象中的某个值
表达式:$.data.forecast[*].type 获取值为:["多云","中到大雨","多云","小雨","多云"]

 

  1. 获取数组中某个位置的值
表达式:$.data.forecast[*].type 获取值为:["多云","中到大雨","多云","小雨","多云"]

取获取值中第一个值“多云”:{$.data.forecast[*].type}[0],依次类推。

 

  1. key中含有特殊值
{
   "data" : [
      {
         "count(*)" : 123,
         "left(send_address,2)":456
      }
   ]
}

表达式:$.["data"][0]["count(*)"] 获取值为:123

表达式:{$.["data"][0]}['left(send_address,2)'] 获取值为:456

 

  1. 判断不包含
[
 {
  "supplierId":523,
  "goodsId":55280465,
  "onlineStatus":1,
  "title":"多颜色商品-auto-20161121154939513",
  "importType":1,
 }
]

表达式:{$.[?(@.goodsId == 55280465)]}.containsKey('avgUv7D') 获取值为false
或
表达式:!{$.[?(@.goodsId == 55280465)]}.containsKey('avgUv7D') 获取值为true
或
表达式:$.[?(@.goodsId == 55280465)].[?(@.avgUv7D)] 获取值为[]

 


http://www.kler.cn/a/513719.html

相关文章:

  • 常用排序算法之插入排序
  • C语言练习(17)
  • Windows电脑桌面记录日程安排的提醒软件
  • 路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)
  • JDK长期支持版本(LTS)
  • 【STM32-学习笔记-4-】PWM、输入捕获(PWMI)
  • Linux和Windows系统之间实现文件共享
  • 【STL】list 双向循环链表的使用介绍
  • 后盾人JS -- Set与WeakSet类型在JavaScript中的使用
  • 《鸿蒙Next原生应用的独特用户体验之旅》
  • PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10
  • UDP/TCP ②-三次握手 || 四次挥手 || 确认应答 || 超时重传
  • Single-Model and Any-Modality for Video Object Tracking——2024——cvpr-阅读笔记
  • 深入解析迁移学习:Transfer Learning模型介绍
  • Spring AI SafeGuardAdvisor
  • JSqlParser:Java SQL 解析利器
  • Codeforces Round 998 (Div. 3)(部分题解)
  • sql:权限管理、存储过程、视图、触发器
  • 从零搭建一套远程手机的桌面操控和文件传输的小工具
  • 小土堆学习笔记10(利用GPU训练于模型验证)
  • 【论文复现】基于改进鲸鱼优化算法的太阳能光伏模型参数提取问题
  • 嵌入式Linux驱动开发之从设备树到点亮LED
  • 使用 Python 获取淘宝商品描述的 API 接口实现与应用
  • C# 委托和事件(事件)
  • 如何用vscode断点调试Vue.js的项目
  • 在亚马逊云科技上用AI提示词优化功能写出漂亮提示词(上)