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]