zoukankan      html  css  js  c++  java
  • 【jmespath】—1. 基础用法

    一、jsonpath

    之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素。
    因为之前写WEB自动化时候,总用xpath去查找元素,所以用起来非常顺手。
    这里是github上的链接,感兴趣的童鞋也可以去学习一下:jsonpath

    二、jmespath

    不过httprunner使用的是另一个第三方库jmespath,这个我还是第一次听。大概看了下好像也很不错,这里是github链接和官方教程。
    github地址
    官方教程

    1. 基础表达式

    ①. 对于字典,可以直接输入key来获取到对应的value。(注意,search是jmespath提供的查询方法,第一个参数是查询语法,第二个则是要查询的数据)

    import jmespath
    
    dic_1 = {"a": "foo", "b": "bar", "c": "baz"}
    path = jmespath.search("a", dic_1)
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    foo
    

    如果索引的key不存在,那么会返回null,或者等效于null的语言,比如在Python中返回就是None。

    import jmespath
    
    dic_1 = {"a": "foo", "b": "bar", "c": "baz"}
    path = jmespath.search("d", dic_1)
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    None
    

    ②. 实际中接口的返回值很多是多层嵌套的,比如我要获取最里面一层的value,可以这样查询:

    import jmespath
    
    dic_1 = {"a": {"b": {"c": {"d": "value"}}}}
    path = jmespath.search("a.b.c.d", dic_1)
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    value
    

    同样,如果引用的键不存在,则返回null值。

    2. 切片

    ①. 对于一个列表[],可以直接用下标查询,类似于python中list元素访问。(注意,索引基于0开始的)

    import jmespath
    
    # dic_1 = {"a": {"b": {"c": {"d": "value"}}}}
    list_1 = ["a", "b", "c", "d", "e", "f"]
    path = jmespath.search("[1]", list_1)
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    b
    

    ②. 字典和列表的嵌套也非常常见,同样查询也可以组合使用:

    import jmespath
    
    dic_1 = {"a": {
              "b": {
                "c": [
                  {"d": [0, [1, 2]]},
                  {"d": [3, 4]}
                ]
              }
    }}
    
    path = jmespath.search("a.b.c[0].d[1][0]", dic_1)
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    1
    

    ③. 列表的切片操作,在这里也可以适用:

    import jmespath
    
    dic_1 = {"a": {
              "b": {
                "c": [
                  {"d": [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]},
                  {"d": [3, 4]}
                ]
              }
    }}
    
    path = jmespath.search("a.b.c[0].d[1][5:10]", dic_1)
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    [5, 6, 7, 8, 9]
    
    

    如果切片参数里的步长是负数,则可以反向切片:

    import jmespath
    
    dic_1 = {"a": {
              "b": {
                "c": [
                  {"d": [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]},
                  {"d": [3, 4]}
                ]
              }
    }}
    
    path = jmespath.search("a.b.c[0].d[1][::-2]", dic_1)#步长是负数
    
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    [9, 7, 5, 3, 1]
    

    上面是一些常规的用法,但是jmespath还提供了一个更强大的核心功能:Projections,可以应用于元素集合的表达式,这个另起再讲。

  • 相关阅读:
    POJ1239
    HDU 2829 四边形不等式优化
    返回数字二进制的最高位位数o(n)
    矩阵快速幂 模板
    HDU4718 The LCIS on the Tree(LCT)
    HDU4010 Query on The Trees(LCT)
    HDU3487 Play With Chains(Splay)
    CF444C DZY Loves Colors
    HDU4836 The Query on the Tree(树状数组&&LCA)
    HDU4831&&4832&&4834
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/13218664.html
Copyright © 2011-2022 走看看