• 【jmespath】—3. 进阶 Object Projections


    继续,来看Object Projections。

    一、Object Projections

    上面说的是列表投影,只适用于列表。那么对于json对象,可以用对象投影。
    投影最终返回的仍然是个列表,只不过内部的元素是查询到的key-value键值对中的value

    import jmespath
    
    dic_1 = {
      "ops": {
        "functionA": {"numArgs": 2},
        "functionB": {"numArgs": 3},
        "functionC": {"variadic": True}
      }
    }
    path = jmespath.search("ops.*.numArgs", dic_1)
    print(path)
    
    #运行结果
    D:Dailywhatisyeild>python jmespath_demo.py
    [2, 3]
    

    可以看到,*创建了json列表,并且通配符处于哪个层级的key,就会遍历这个层级key的所有value。
    上面的例子中, ops.*就是会找 functionA、functionB、functionC,而更进一步ops.*.numArgs 则是继续往里面找到keynumArgs的值,并放到投影的列表里去返回,所以看的返回的结果是[2, 3]

    官方的解释

    ops.*.numArgs中的通配符*我们可以看做一个分界线,分为左边和右边,即左边ops,右边numArgs

    第一步,左边初始化了一个可以投影的数组:

    evaluate(ops, inputData) -> [{"numArgs": 2}, {"numArgs": 3},
                                 {"variadic": True}]
    

    第二步,右边遍历数组里的每一个元素:

    evaluate(numArgs, {numArgs: 2}) -> 2
    evaluate(numArgs, {numArgs: 3}) -> 3
    evaluate(numArgs, {variadic: true}) -> null
    

    但是因为variadic这个key与 numArgs不匹配,所以返回的是null
    而对于null,是不会添加到最终返回的结果数组里的,所以最终结果只有[2, 3]

  • 相关阅读:
    剑指Offer_08_跳台阶
    剑指Offer_07_斐波那契数列
    HDU 4283 You Are the One
    1B. Spreadsheets
    1A Theatre Square
    HDU 2476 String painter(记忆化搜索, DP)
    LightOJ 1422 Halloween Costumes(记忆化搜索)
    POJ 1651 Multiplication PuzzleDP方法:
    POJ 2955 Brackets (区间DP)
    HDU 5452 Minimum Cut
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/13225671.html
Copyright © 2020-2023  润新知