import jmespath
# 列表
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 所有元素
print(jmespath.search('[]', data) ) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(jmespath.search('[*]', data) ) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
jmespath.search('[:]', data) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 部分数据
print(jmespath.search('[5:8]', data) ) # 输出结果 [6, 7, 8]
jmespath.search('[::-1]', data) #输出结果 [9, 8, 7, 6, 5, 4, 3, 2, 1]
jmespath.search('[8:1:-2]', data) #输出结果 [9, 7, 5, 3]
# 字典
data = {"a": "foo", "b": "bar", "c": "baz"}
print(jmespath.search('a', data)) # 输出结果"foo"
data = {"a": {"b": {"c": {"d": "value"}}}}
print(jmespath.search('a.b.c.d', data) ) #输出结果 "value"
# 列表与字典
data = {"a": {
"b": {
"c": [
{"d": [0, [1, 2]]},
{"d": [3, 4]}
]
}
}}
print(jmespath.search('a.b.c[0].d[1][0]', data) ) #输出结果 1
# *匹配
data = {
"ops": {
"functionA": {"numArgs": 2},
"functionB": {"numArgs": 3},
"functionC": {"variadic": True}
}
}
print(jmespath.search('ops.*.numArgs', data)) #输出结果 [2, 3]
# 过滤
data = {
"machines": [
{"name": "a", "state": "running"},
{"name": "b", "state": "stopped"},
{"name": "b", "state": "running"}
]
}
jmespath.search("machines[?state=='running'].name", data) #输出结果 ['a', 'b']
# 多个筛选条件
data = {
"people": [
{"first": "James", "last": "d"},
{"first": "James", "last": "e"},
{"first": "Jayden", "last": "f"},
{"missing": "different"}
],
"foo": {"bar": "baz"}
}
print(jmespath.search("people[?first=='James'] ", data) ) #输出结果 [{'first': 'James', 'last': 'd'}, {'first': 'James', 'last': 'e'}]
print(jmespath.search("people[?first=='James'] | [?last=='e'] ", data) ) #输出结果 [{'first': 'James', 'last': 'e'}]
print(jmespath.search("people[?first=='James'] | [?last=='e'] | [0]", data) ) #输出结果 {'first': 'James', 'last': 'e'}