JMESPath语言

JMESPath(JSON Matching Expression Path)

一种查询语言。

主要用于从JSON文档中检索和过滤数据。

通过写表达式提取和处理JSON数据,而无需编写复杂的代码。

功能:数据提取、过滤、转换、排序。

场景:处理API响应、数据分析、数据转换 etc。

数据提取:从复杂的JSON文档中提取所需的信息。例如,从包含多个嵌套对象和数组的JSON文档中提取特定属性。

数据过滤:基于特定条件过滤JSON数据。例如,从一个包含多个对象的数组中过滤出满足特定属性值条件的对象。

数据转换:将JSON数据转换为其他格式。例如,将一个包含多个属性的对象转换为一个只包含部分属性的新对象,或将一个数组转换为一个新的数组,其中的元素经过特定计算或操作。

数据排序:根据特定属性对JSON数据进行排序。

JMESPath — JMESPathicon-default.png?t=N7T8https://jmespath.org/

本文主要以 JMESPath Tutorial and Examples 为操作示例,还有包括一些其他常用示例:

目录

一些常用调用方式

一些常用表达式

一些常用嵌套语句


一些常用调用方式

jmespath结果备注
{
  "demo": "hello world"
}
demo"hello world"str
{
  "demo": 1
}
demo1int
{
  "demo": ["1", "2"]
}

demo / demo[*] / demo[:] / demo[]

[
  "1",
  "2"
]
array
{
  "demo": {
    "key": "value",
    "k": "v",
    "a": {"b": "c"}
  }
}
demo
{
  "key": "value",
  "k": "v",
  "a": {
    "b": "c"
  }
}
object
{}demonullnull

元素获取

jmespath结果备注
{
  "demo": {
    "key": "value",
    "k": "v",
    "a": {"b": "c"}
  }
}
demo.key / demo."key""value"
同上demo.a.b"c"
同上demo.[key, k]
[
"value",
  "v"
]
同上demo.{"k1": key, "k2": k} / demo.{k1: key, k2: k}
{
  "k1": "value",
  "k2": "v"
}
{"d":{}}d{}
{
  "demo": [1, 2, 3]
}
demo[0] / demo[:1]1
{"d":[]}d[]
同上demo[2:]3slice:[start:stop:step]或[start:stop],step为负则倒取
同上demo[3]null
同上demo[1:3][2, 3]slice
同上demo[::-1]
[3, 2, 1]
slice
同上demo[::2]
[1,3]
slice

一些常用表达式

jmespath结果备注
{
  "demo": [1, 2, 3]
}
to_string(demo)
"[1,2,3]"
转字符串 to_string(打平显示使用)
同上length(demo)3长度 length
同上type(demo)
"array"
{
  "demo": {
    "key": "value",
    "k": "v",
    "a": {"b": "c"}
  }
}
to_string(demo)

"{\"key\":\"value\",\"k\":\"v\",\"a\":{\"b\":\"c\"}}"

同上length(demo)3
同上type(demo)
"object"
{"a": "1.1"}to_number(a)1.1to number转数字
{
  "demo": [1, 2, 19]
}
max(demo)19max最大值
同上min(demo)1min最小值
同上avg(demo)
7.333333333333333
avg平均数(显示长度控制在16位)
同上sum(demo)22sum和
同上hhh || demo[0]1||   
同上demo[1] || demo[2]2
同上demo[1] && demo[2]19&& 
{
  "a": [
    {
      "b1": "James",
      "b2": "d",
      "c": 30
    },
    {
      "b1": "Jacob",
      "b2": "e",
      "c": 35
    },
    {
      "b1": "Jayden",
      "b2": "f",
      "c": 25
    }
  ]
}
a[?c > `18`]
[
  {
    "b1": "Jacob",
    "b2": "e",
    "c": 20
  },
  {
    "b1": "Jayden",
    "b2": "f",
    "c": 23
  }
]
条件选择 filter
同上a[?c > `18`].{b1: b1, age: c}
[
  {
    "b1": "Jacob",
    "age": 20
  },
  {
    "b1": "Jayden",
    "age": 23
  }
]
同上a[?c==`18`]
[
  {
    "b1": "James",
    "b2": "d",
    "c": 18
  }
]
同上a[?c==`18`].{b1: b1, age: c}
[
  {
    "b1": "James",
    "age": 18
  }
]
​​​​​​​
同上a[?c==`20`].[b1, b2]
[
  [
    "Jacob",
    "e"
  ]
]
同上a[?c==`20`].[b1, b2] | [] / a[?c==`20`].[b1, b2] | [0]
[
  "Jacob",
  "e"
]

管道表达式。

 | [] 或 | [0]的写法能消除嵌套下的外[]

同上a | [0] / a | []
{
  "b1": "James",
  "b2": "d",
  "c": 18
}
同上a | [1]
{
  "b1": "Jacob",
  "b2": "e",
  "c": 20
}
{"a":[{"b1":"詹姆斯","b2":"d","c":30},{"b1":"雅各布","b2":"e","c":35},{"b1":"杰登","b2":"f","c":25}]}sort_by(a, &c)
[
  {
    "b1": "杰登",
    "b2": "f",
    "c": 25
  },
  {
    "b1": "詹姆斯",
    "b2": "d",
    "c": 30
  },
  {
    "b1": "雅各布",
    "b2": "e",
    "c": 35
  }
]
sort_by排序
{
  "a": [
    "foo",
    "foobar",
    "barfoo",
    "bar",
    "barbaz",
    "barfoobaz"
  ]
}
a[?contains(@, 'foo') == `true`]
["foo","foobar","barfoo",barfoobaz]
字符匹配 contains与匿名@

一些常用嵌套语句

嵌套调用

jmespath结果备注
{"a": {
    "c": [
      {"d": [0, [1, 2]]}
    ]
}}
a.c[0].d[1][0]1
{
  "a": [
    {
      "b1": "James",
      "b2": "d",
      "c": 30
    },
    {
      "b1": "Jacob",
      "b2": "e",
      "c": 35
    },
    {
      "b1": "Jayden",
      "b2": "f",
      "c": 25
    }
  ]
}
a[*].b1 / a[].b1 / a[:].b1
[
  "James",
  "Jacob",
  "Jayden"
]
同上a[*].[b1, b2]

[

  ["James", "d"],

  ["Jacob", "e"],

  ["Jayden", "f"]

]

同上a[*].[*]

[

  [["James", "d", 30]],

  [["Jacob", "e", 35]],

  [["Jayden", "f", 25]]

]

同上a[*].{b1: b1, "b2": `1`}
[
  {
    "b1": "James",
    "b2": 1
  },
  {
    "b1": "Jacob",
    "b2": 1
  },
  {
    "b1": "Jayden",
    "b2": 1
  }
]
同上a[::2].{b1: b1, "b2": `1`}
[
  {
    "b1": "James",
    "b2": 1
  },
  {
    "b1": "Jayden",
    "b2": 1
  }
]
{
    "a": {
        "a1": {
            "b1": "James",
            "b2": "d",
            "c": 30
        },
        "a2": {
            "b1": "Jacob",
            "b2": "e",
            "c": 35
        },
        "a3": {
            "b1": "Jayden",
            "b2": "f",
            "c": 25
        }
    }
}
a.*.c
[
  30,
  35,
  25
]
同上a.*.*

[

  ["James", "d", 30],

  ["Jacob", "e", 35],

  ["Jayden", "f", 25]

]

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/252312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【谭浩强C程序设计精讲 1】数据类型、常量与变量

文章目录 3.1 C 的数据类型3.2 常量与变量3.2.1 常量和符号常量3.2.2 变量 3.1 C 的数据类型 C语言的数据结构是以数据类型形式出现的。C的数据类型如下: C语言中数据有常量与变量之分,它们分别属于以上这些类型。由以上这些数据类型还可以构成更复杂…

三分钟搞定 || java邮件发送(支持附件,多发)

1.添加Maven依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version> </dependency><dependency><groupId>cn.hutool</groupId><artifactId>…

图书管理系统jsp + servlet+mysql

图书管理系统 项目使用jsp servletmysql实现&#xff1b; 登陆注册 首页 首页显示图书信息 图书管理 1添加书籍 2查询书籍 3预览书籍 4修改书籍 用户管理 1查询用户 2修改用户 3 删除用户 链接&#xff1a;https://pan.baidu.com/s/1QXK--ypb6OadbmKFlc0jUQ

跨域的解决方式(java后端)

文章目录 一、跨域介绍1、什么是跨域2、为什么会产生跨域3、禁止跨域的原因 二、简单请求和非简单请求1、简单请求1.1、什么时简单请求1.2、简单请求基础流程 2、非简单请求2.1、预检请求2.2、预检请求的回应2.3、浏览器的正常请求和回应 3、自定义跨域过滤器 三、解决方式1、C…

2023年【G2电站锅炉司炉】考试题库及G2电站锅炉司炉考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉考试题库参考答案及G2电站锅炉司炉考试试题解析是安全生产模拟考试一点通题库老师及G2电站锅炉司炉操作证已考过的学员汇总&#xff0c;相对有效帮助G2电站锅炉司炉考试报名学员顺利通过考试。 1、【多…

【Java】智慧工地系统:让建筑行业管理更简单

概述 智慧工地管理平台面向房建、能源、交通各类工地的管理者&#xff0c;通过AI视频、物联感知技术对工地场景中的施工机械、建筑材料、施工规范、施工环境监管、完善施工现场项目管控。实现项目管控、特种设备管理、绿色施工、工地巡检等业务功能&#xff0c;沉淀工地监管数…

IDEA报错处理

问题1 IDEA 新建 Maven 项目没有文件结构 pom 文件为空 将JDK换成1.8后解决。 网络说法&#xff1a;别用 java18&#xff0c;换成 java17 或者 java1.8 都可以&#xff0c;因为 java18 不是 LTS 版本&#xff0c;有着各种各样的问题。。

Web(8)sqlmap工具使用

Sqlmap工具的使用&#xff1a; 首先配置Python环境变量 为什么需要环境变量&#xff1f; 感觉是在cmd中添加了一个快捷方式&#xff0c;使得可以认识 比如path&#xff0c;是告诉系统&#xff0c;当要求系统运行的程序没有告诉程序所在完整路径时&#xff0c;系统除了在当前…

C#浅拷贝和深拷贝数据

目录 一、浅拷贝 二、深拷贝 一、浅拷贝 就是把原来的数据&#xff0c;复制一份&#xff0c;但是2份数据是共享地址的&#xff0c;修改第一份数据或者修改第二份数据&#xff0c;都会一起改变&#xff0c;这可能不是我们程序中需要的场景。 下面我们演示一下&#xff0c;首…

时序预测 | Python实现GRU电力需求预测

时序预测 | Python实现GRU电力需求预测 目录 时序预测 | Python实现GRU电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用该…

MySql的增、删、改、查(MySql数据库学习——五)

增&#xff08;数据添加/插入数据&#xff09; 使用 INSERT INTO SQL 语句来插入数据。我们可以通过 mysql> 命令提示窗口中向数据表中插入数据&#xff0c;或者 通过PHP 脚本来插入数据。 sql语句&#xff1a; INSERT INTO table_name ( field1, field2,...fieldN ) …

暂退法(丢弃法)

在深度学习中&#xff0c;丢弃法&#xff08;Dropout&#xff09;是一种常用的正则化技术&#xff0c;旨在减少模型的过拟合现象&#xff0c;可能会比之前的权重衰减(Weight Decay)效果更好。通过在训练过程中随机丢弃一部分神经元&#xff0c;可以有效地减少神经网络中的参数依…

【华为数据之道学习笔记】5-4 数据入湖方式

数据入湖遵循华为信息架构&#xff0c;以逻辑数据实体为粒度入湖&#xff0c;逻辑数据实体在首次入湖时应该考虑信息的完整性。原则上&#xff0c;一个逻辑数据实体的所有属性应该一次性进湖&#xff0c;避免一个逻辑实体多次入湖&#xff0c;增加入湖工作量。 数据入湖的方式…

如何从 iPhone 上恢复已删除的照片教程分享

您是否错误地删除了 iPhone 上的错误照片&#xff1f;或者您可能已将手机恢复出厂设置&#xff0c;但现在所有照片都消失了&#xff1f;如果您现在遇到这样的情况&#xff0c;我们可以为您提供解决方案。 在本文中&#xff0c;我们将向您展示七种数据恢复方法&#xff0c;可以…

对可恢复的情况使用受检异常

在Java中&#xff0c;受检异常&#xff08;Checked Exception&#xff09;通常用于表示程序能够预期并且可能进行恢复的异常情况。这类异常是在编译时由编译器强制进行处理的&#xff0c;使得程序员必须显式处理这些异常&#xff0c;或者在方法签名中使用 throws 关键字声明。 …

Zoho Mail企业邮箱:6大高效使用技巧

本期小Z就带您了解下&#xff0c;Zoho Mail非常实用的几个小技巧&#xff0c;帮助您进一步提升工作效率。 01/轻松从其他邮箱迁移到Zoho Mail 每天我们都会收到很多垃圾邮件、网络钓鱼、或者不需要的促销邮件等等&#xff0c;筛选出这些邮件耗时耗力&#xff0c;这个时候寻找…

借着期末作业,写一个JavaWeb项目

合集传送门 要求 学生成绩管理系统设计与实现 设计一个学生成绩管理系统。根据以下功能&#xff0c;分析使用的逻辑结构和存储结构。并设计菜单&#xff0c;显示相应结果。 &#xff08;1&#xff09;录入功能&#xff1a;能够录入学生成绩&#xff08;包括&#xff1a;学号…

面向对象方法分析之 各种图

没想到研究生了还要跟这些奇奇怪怪的图打交道&#xff08;不是&#xff09; 以下是面向对象分析中常用到的图。 静态视图 静态视图对应用领域中的概念以及与系统实现有关的内部概念建模&#xff0c;主要由类以及类之间的相互关系组成&#xff0c;在静态视图中不描述依赖于时…

《opencv实用探索·二十》点追踪技术

前言&#xff1a; 在学习点追踪技术前需要先了解下光流发追踪目标&#xff0c;可以看上一章内容&#xff1a;光流法检测运动目标 如果以光流的方式追踪目标&#xff0c;基本上我们可以通过goodFeaturesToTrack函数计算一系列特征点&#xff0c;然后通过Lucas-Kanade算法进行一…

vue3 setup语法糖写法基本教程

前言 官网地址&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org)下面只讲Vue3与Vue2有差异的地方&#xff0c;一些相同的地方我会忽略或者一笔带过与Vue3一同出来的还有Vite&#xff0c;但是现在不使用它&#xff0c;等以后会有单独的教程使用。目前仍旧使用v…