美文网首页
jmespath 基本用法

jmespath 基本用法

作者: mocobk | 来源:发表于2020-12-11 14:34 被阅读0次

    官方文档地址

    一. 基本语法

    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.  表达式中需要注意单双引号对应,否则可能会定位不到值
    

    相关文章

      网友评论

          本文标题:jmespath 基本用法

          本文链接:https://www.haomeiwen.com/subject/wyujgktx.html