官方文档地址
一. 基本语法
1.字典层级:(通过键取相应值)
Json串:{"a": {"b": {"c": {"d": "value"}}}}
Jmespath表达式:a.b.c.d
定位到值value,如果表达式中的键不在json串中,输出null
2.列表索引(通过索引取相应值,索引从0开始,负数表示倒序,-1表示倒数第一个)
Json串:["a", "b", "c", "d", "e", "f"]
Jmespath表达式:[1]
定位到值b,如果表达式给出的索引超出范围,返回null
3.字典和列表混合结构:
Json串:
{"a": {
"b": {
"c": [
{"d": [0, [1, 2]]},
{"d": [3, 4]}
]
}
}}
Jmespath表达式:a.b.c[0].d[1][0]
定位到值1,如果表达式中的键不在json串中,或索引超过了json串中的索引范围,返回null
4.切片
对于json串中的list部分,可以通过[start_index : end_index : step]
的格式来取值,start_index
, end_index
, step
均能为负数,表示倒序
二. 投影
列表和切片投影
List[*], list[0]
Ops.*.numArgs
三. 条件过滤
[? <expression> <comparator><expression>]
比较运算符:==, !=, <, <=, >, >=
逻辑运算符:或||,与&&,非!,
其他运算符:管道|,右括号]
表达式是数值,需要用``符号括起来
表达式是空,需要用`null`表示,注意不是单引号
表达式是字符串,需要加引号表示
在进行比较运算时,需要注意该位置的值与表达式中的值不会发生类型冲突
如'>' not supported between instances of 'str' and 'int',None可以与其他类型同时存在
四. 多选
列表:people[].[name, state.name]
字典:people[].{Name: name, State: state.name}
五. 函数
返回长度:length(),
取最大:max_by(<父级元素>, &<比较值的元素>).name
包含:contains(@, 'foo'),@关联到当前级别的元素值
排序:sort_by(contents, &Date)
六. 踩过的坑
1. 比较运算符需要注意两个表达式的值类型,不能比较的类型放在一起会报错
2. 表达式中需要注意单双引号对应,否则可能会定位不到值
网友评论