jmespath(1)基础语法
前言
JMESPath是JSON的查询语言。您可以从JSON文档中提取和转换元素
官方文档:https://jmespath.org/tutorial.html
基本表达式
JMESPath用的最多的方法就是search查询方法,下面是语法结构
search(<jmespath expr>, <JSON document>) -> <return value>
- jmespath expr:查询的表达式
- JSON document:查询的数据
除了JMESPath表达式类型之外,JMESPath也支持JSON支持的相同类型
- number (JSON中的整数和双精度浮点格式)
- string
- boolean (true or false)
- array (有序的值序列)
- object (键值对的无序集合)
- null
import jmespath
dict1 = {"a": "foo", "b": "bar", "c": "baz"}
path = jmespath.search("a", dict1)
print(path)
# 结果:
foo
上述代码描述的是从dict1数据中,查找key=a的值
如果索引的key不存在,则返回null,或者等效于null的语言,比如在Python中返回就是None。
import jmespath
dict1 = {"a": "foo", "b": "bar", "c": "baz"}
path = jmespath.search("a1", dict1)
print(path)
# 结果
None
实际中接口的返回值大多是多层嵌套的,比如我要获取最里面一层的value,可以这样查询:
import jmespath
dict1 = {"a": {"b": {"c": {"d": "value"}}}}
path = jmespath.search("a.b.c.d", dict1)
print(path)
# 结果
value
索引表达式
①索引表达式可以选择列表中的特定元素。类似于python中的list。
import jmespath
dict1 = ["a", "b", "c", "d", "e", "f"]
path = jmespath.search("[0]", dict1)
print(path)
# 结果
a
②如果指定的索引大于列表,则返回null值
import jmespath
dict1 = ["a", "b", "c", "d", "e", "f"]
path = jmespath.search("[10]", dict1)
print(path)
# 结果
None
③字典和列表的嵌套也非常常见,同样查询也可以组合使用
import jmespath
dict1 = {
"a": {
"b": {
"c": [
{"d": [0, [1, 2]]},
{"d": [3, 4]}
]
}
}
}
path = jmespath.search("a.b.c[0].d[1][0]", dict1)
print(path)
# 结果
1
切片
列表的切片操作,python中可以使用的,这里都适用
import jmespath
dict1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
path = jmespath.search("[5:10]", dict1)
print(path)
# 结果
[5, 6, 7, 8, 9]
下面展示我们最常用的反向切片
import jmespath
dict1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
path = jmespath.search("[::-2]", dict1)
print(path)
# 结果
[9, 7, 5, 3, 1]
jmespath(1)基础语法的更多相关文章
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- iOS-----正则表达式的基础语法
正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- emmet 系列(1)基础语法
emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- Java基础语法
java基础学习总结——基础语法1 一.标识符
- javascript中正则表达式的基础语法
× 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
随机推荐
- 浅析 MVC Pattern
一.前言 最近做CAD插件相关的工作,用到了一些模式,解决对应场景的问题. 比如插件的运行实例上使用Singleton.实例内部使用了MVC(Strategy and Observer ). 针对CA ...
- Java 实现简单的 Socket 通信
Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层.本文介绍了 Java socket 简单用法. 1. 传输层协议 传输层包含了两种协议,分别是 TCP (T ...
- 借助window.performance实现基本的前端基础性能监控日志
借助window.performance实现基本的前端基础性能监控日志并二次重写console方法方便日常前端console日志的调试 npm install sn-console
- Linux面试必备
1.Linux的体系结构
- 彻底搞懂MySQL为什么要使用B+树索引
目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...
- buuctf刷题之旅—web—WarmUp
启动靶机 查看源码发现source.php 代码审计,发现hint.php文件 查看hint.php文件(http://7ab330c8-616e-4fc3-9caa-99d9dd66e191.nod ...
- os-hackos-3-docker提权
0x00 cewl http://192.168.43.179/websec/爬取页面所有的单词做成字典 hydra -l contact@hacknos.com -P cewl.txt 192.16 ...
- 1V升压到3V的芯片,1V升压3.3V电路图
1V升压到3V和1V升压3.3V的升压芯片? PW5100 是一款效率很大.低功耗.低纹波.高工作频率的 PFM 同步升压 DC/DC 变换器.输出电压可选固定输出值,从 3.0V,3.3V, 5.0 ...
- 我在华为OD的275天
目录 0 - 时间线 1 - 为什么会去华为 OD 2 - 华为 OD 的工作内容 3 - OD 与华为自有员工的对比 4 - 那,到底要不要去华为 OD? 5 - 网传的 OD 转华为正编,真的假的 ...
- 虚拟化kvm的搭建
虚拟化, 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 ,在一台计算机上同时运行多个逻辑计算机,每台逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不 ...