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

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排序
同上join(' ', [a[0].b1, a[1].b1, a[2].b1])
"詹姆斯 雅各布 杰登"
join字符串拼接
{
  "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]

]

​​​​​​​

相关文章:

JMESPath语言

JMESPath(JSON Matching Expression Path) 一种查询语言。 主要用于从JSON文档中检索和过滤数据。 通过写表达式提取和处理JSON数据,而无需编写复杂的代码。 功能:数据提取、过滤、转换、排序。 场景:处理API响应…...

【C++高阶(七)】C++异常处理的方式

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 异常处理的方式 1. 前言2. C语言处理异常的方式…...

在Idea中创建基于工件的本地服务

目录 1、创建基于工件的Tomcat服务器: 2、修改名称: 3、修改服务器项: 4、部署项 5、最后记得点右下角的【应用】和【确定】保存。 1、创建基于工件的Tomcat服务器: 运行->编辑配置->【Tomcat服务器】->本地 2、修…...

十六、YARN和MapReduce配置

1、部署前提 (1)配置前提 已经配置好Hadoop集群。 配置内容: (2)部署说明 (3)集群规划 2、修改配置文件 MapReduce (1)修改mapred-env.sh配置文件 export JAVA_HOM…...

自己动手写编译器:语法解析的基本原理

在前面系列章节中我们完成了词法解析。词法解析的基本任务就是判断给定字符串是否符合特定规则,如果符合那么就给这个字符串分配一个标签(token)。词法解析完成后接下来的工作就要分配给语法解析,后者的任务就是判断一系列标签的组合是否符合特定规范。 …...

VS Code解决乱码

在上边搜索栏输入“>Change File Encoding”,更改编码格式,解决乱码格式。 VS Code会帮助确认编码格式,然后选择就好。 最后完成如下:...

宝塔Linux:部署His医疗项目通过jar包的方式

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有…...

Vim命令大全(超详细,适合反复阅读学习)

Vim命令大全 Vim简介Vim中的模式光标移动命令滚屏与跳转文本插入操作文本删除操作文本复制、剪切与粘贴文本的修改与替换文本的查找与替换撤销修改、重做与保存编辑多个文件标签页与折叠栏多窗口操作总结 Vim是一款文本编辑器,是Vi编辑器的增强版。Vim的特点是快速、…...

爬虫持久化保存

## open方法- 方法名称及参数markdown **open(file, moder, bufferingNone, encodingNone, errorsNone, newlineNone, closefdTrue)****file** 文件的路径,需要带上文件名包括文件后缀(c:\\1.txt)**mode** 打开的方式(r,w,a,x,b,t…...

统一大语言模型和知识图谱:如何解决医学大模型-问诊不充分、检查不准确、诊断不完整、治疗方案不全面?

统一大语言模型和知识图谱:如何解决医学大模型问诊不充分、检查不准确、诊断不完整、治疗方案不全面? 医学大模型问题如何使用知识图谱加强和补足专业能力?大模型结构知识图谱增强大模型的方法 医学大模型问题 问诊。偏离主诉和没抓住核心。…...

读写分离之同步延迟测试

背景 读写分离是快速提高数据库性能的手段,主库只负责写入,从库负责查询。但在性能得到提升的同时,编程的复杂度就会提升。由其碰到主从同步延迟的情况,在数据写入后,在从库无法读取到最新数据,会对业务逻…...

SpringBoot+OCR 实现PDF 内容识别

一、SpringBootOCR对pdf文件内容识别提取 1、在 Spring Boot 中,您可以结合 OCR(Optical Character Recognition)库来实现对 PDF 文件内容的识别和提取。 一种常用的 OCR 库是 Tesseract,而 pdf2image 是一个用于将 PDF 转换为图…...

Go和Java实现抽象工厂模式

Go和Java实现抽象工厂模式 本文通过简单数据库操作案例来说明抽象工厂模式的使用,使用Go语言和Java语言实现。 1、抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创 建型模式,它…...

深入理解Java虚拟机---内存分配

深入理解Java虚拟机---内存分配 GC日志内存分配与回收策略对象优先在Eden分配大对象直接进入老年代长期存活的对象将进入老年代动态对象年龄判定空间分配担保 GC日志 以下两段典型的GC日志: 33.125: [GC [DefNew: 3324K->152K(3712K), 0.0025925 secs] 3324K-&…...

计算机网络2

OSI参考模型七层: 1.应用层 2.表示层 3.会话层 4.传输层 5.网络层 6.数据链路层 7.物理层 TCP/IP模型 5层参考模型...

jenkins-Generic Webhook Trigger指定分支构建

文章目录 1 需求分析1.1 关键词 : 2、webhooks 是什么?3、配置步骤3.1 github 里需要的仓库配置:3.2 jenkins 的主要配置3.3 option filter配置用于匹配目标分支 实现指定分支构建 1 需求分析 一个项目一般会开多个分支进行开发,测试&#x…...

源码解析8-QSS原理-案例-Qt的qss特殊设置多个子控件的颜色与伪状态

Qt源码解析 索引 源码解析8-QSS原理-案例-Qt的qss特殊设置多个子控件的颜色与伪状态 有些时候我们想特殊设置QSS,比如某一类标题栏目,某一个窗口中的颜色。 重要的是我们需要同时设置多个特殊的按钮等。 统一设置所有 单一按钮全局设置 QPushButton…...

Nginx+Tomcat实现负载均衡和动静分离

目录 前瞻 动静分离和负载均衡原理 实现方法 实验(七层代理) 部署Nginx负载均衡服务器(192.168.75.50:80) 部署第一台Tomcat应用服务器(192.168.75.60:8080) 多实例部署第二台Tomcat应用服务器(192.168.75.70:80…...

linux系统的u盘/mmc/sd卡等的支持热插拔和自动挂载行为

1.了解mdev mdev是busybox自带的一个简化版的udev。udev是从Linux 2.6 内核系列开始的设备文件系统(DevFS)的替代品,是 Linux 内核的设备管理器。总的来说,它取代了 devfs 和 hotplug,负责管理 /dev 中的设备节点。同时…...

使用Python将OSS文件免费下载到本地:项目分析和准备工作

大家好,我是水滴~~ 本文将介绍如何使用Python编程语言将OSS(对象存储服务)中的文件免费下载到本地计算机。我们先进行项目分析和准备工作,为后续的编码及实施提供基础。 《Python入门核心技术》专栏总目录・点这里 文章目录 1. 前…...

从Gitee克隆项目、启动方法

从gitee克隆VUE项目到本地后,不能直接运行,需要进行npm install安装node_modules文件夹里面的内容,因为在git上传的时候,一般都会过滤到node_modules中的依赖文件。 安装依赖以后,启动通过npm run serve启动项目出错。…...

不用再找了,这是大模型实践最全的总结

随着ChatGPT的迅速出圈,加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说,传统的单机单卡训练模式肯定不能满足上千(万)亿级参数的模型训练,这时候我们就需要解决内存墙和通信墙等一系列问题&am…...

QT 记录

qml 移动窗口会闪烁 int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);//orQCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL); }window 拉取qml程序依赖文件 打开QT自带的命令窗口,转到exe程序目录: …...

智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑寡妇算法4.实验参数设定5.算法结果6.参考文…...

VSCode 常用的快捷键和技巧系列(2)

一、如何让VSCode工程树显示图标 第一步:安装 快捷键 CtrlP ,输入 ext install vscode-icons ,然后点击安装插件 第二步:配置 安装成功后,点击Reload重新加载。 然后配置,当前图标使用VsCode-Icons Go…...

【Hadoop】执行start-dfs.sh启动hadoop集群时,datenode没有启动怎么办

执行start-dfs.sh后,datenode没有启动,很大一部分原因是因为在第一次格式化dfs后又重新执行了格式化命令(hdfs namenode -format),这时主节点namenode的clusterID会重新生成,而从节点datanode的clusterID 保持不变。 在…...

计算机网络(四)

九、网络安全 (一)什么是网络安全? A、网络安全状况 分布式反射攻击逐渐成为拒绝攻击的重要形式 涉及重要行业和政府部门的高危漏洞事件增多。 基础应用和通用软硬件漏洞风险凸显(“心脏出血”,“破壳”等&#x…...

非递归实现的快速排序

目录 序列文章 前言 学前补充 非递归快速排序 注意事项(重要) 实现步骤 代码实现 时空复杂度 快速排序的特性 栈的相关代码 序列文章 非递归实现的快速排序:http://t.csdnimg.cn/UEcL6 快速排序的挖坑法与双指针法:ht…...

windows 安装jenkins

下载jenkins 官方下载地址:Jenkins 的安装和设置 清华源下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/windows-stable/ 最新支持java8的版本时2.346.1版本,在清华源中找不到,在官网中没找到windows的下载历史&#xff…...

SQL进阶理论篇(十二):InnoDB中的MVCC是如何实现的?

文章目录 简介事务版本号行记录的隐藏列Undo LogRead View的工作流程总结参考文献 简介 在不同的DBMS里,MVCC的实现机制是不同的。本节我们会以InnoDB举例,讲解InnoDB里MVCC的实现机制。 我们需要掌握这么几个概念: 事务版本号行记录的隐藏…...