jmespath 基本用法


官方文档地址

一. 基本语法

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.  表达式中需要注意单双引号对应,否则可能会定位不到值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。