JMESPath语言
JMESPath(JSON Matching Expression Path)
一种查询语言。
主要用于从JSON文档中检索和过滤数据。
通过写表达式提取和处理JSON数据,而无需编写复杂的代码。
功能:数据提取、过滤、转换、排序。
场景:处理API响应、数据分析、数据转换 etc。
数据提取:从复杂的JSON文档中提取所需的信息。例如,从包含多个嵌套对象和数组的JSON文档中提取特定属性。
数据过滤:基于特定条件过滤JSON数据。例如,从一个包含多个对象的数组中过滤出满足特定属性值条件的对象。
数据转换:将JSON数据转换为其他格式。例如,将一个包含多个属性的对象转换为一个只包含部分属性的新对象,或将一个数组转换为一个新的数组,其中的元素经过特定计算或操作。
数据排序:根据特定属性对JSON数据进行排序。
JMESPath — JMESPath
https://jmespath.org/
本文主要以 JMESPath Tutorial and Examples 为操作示例,还有包括一些其他常用示例:
目录
一些常用调用方式
一些常用表达式
一些常用嵌套语句
一些常用调用方式
| 源 | jmespath | 结果 | 备注 |
| { "demo": "hello world" } | demo | "hello world" | str |
| { "demo": 1 } | demo | 1 | int |
| { "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 |
| {} | demo | null | null |
元素获取
| 源 | 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:] | 3 | slice:[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.1 | to number转数字 |
| { "demo": [1, 2, 19] } | max(demo) | 19 | max最大值 |
| 同上 | min(demo) | 1 | min最小值 |
| 同上 | avg(demo) | 7.333333333333333 | avg平均数(显示长度控制在16位) |
| 同上 | sum(demo) | 22 | sum和 |
| 同上 | 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. 前…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
