【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:\Daily\whatisyeild>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:\Daily\whatisyeild>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:\Daily\whatisyeild>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:\Daily\whatisyeild>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:\Daily\whatisyeild>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:\Daily\whatisyeild>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:\Daily\whatisyeild>python jmespath_demo.py
[9, 7, 5, 3, 1]

上面是一些常規的用法,但是jmespath還提供了一個更強大的核心功能:Projections,可以應用於元素集合的表達式,這個另起再講。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM