推薦一款Python介面自動化測試資料提取分析神器!

狂师發表於2024-07-11

1、引言

在處理JSON資料時,我們常常需要提取、篩選或者變換資料。手動編寫這些操作的程式碼不僅繁瑣,而且容易出錯。Python作為一個功能強大的程式語言,擁有豐富的庫和工具來處理這些資料。今天,將介紹一個實用的Python庫——JMESPath,它為提取JSON資料提供了簡潔而強大的語法。

2、JMESPath介紹

Jmespath(JSON Messaging Path)是一種用於查詢和轉換JSON資料的查詢語言,專為JSON資料設計。它允許開發者使用簡潔的表示式來提取、篩選和轉換JSON資料中的元素,使得開發者能夠輕鬆地提取JSON資料中的元素,並執行各種轉換操作。與XPath類似,JMESPath的語法直觀易懂,學習成本較低。

3、JMESPath安裝

在使用Python Jmespath之前,需要先透過pip安裝該庫:

pip install jmespath

4、JMESPath用途

JMESPath在Python中的用途廣泛,尤其適用於以下場景:

  • 介面自動化測試:在測試API介面時,經常需要從響應的JSON資料中提取待驗證的欄位值。使用JMESPath,可以輕鬆編寫查詢表示式,快速定位並提取所需資料。
  • 資料處理與分析:在處理和分析大量JSON資料時,JMESPath可以幫助開發者快速篩選和轉換資料,提高資料處理效率。
  • 日誌分析與監控:在日誌管理和監控系統中,JSON格式的日誌資料非常常見。使用JMESPath,可以輕鬆從日誌資料中提取關鍵資訊,實現實時監控和告警。

5、JMESPath的特性

JMESPath具有以下特性:

  • 宣告式語法:JMESPath使用宣告式語法,使得表示式易於閱讀和編寫,透過點(.)和方括號([])運算子即可輕鬆訪問JSON物件中的屬性和陣列元素。
  • 強大的功能:支援多種運算子、函式和語法結構,可以處理各種複雜的資料結構。
  • 跨語言跨平臺支援:JMESPath不僅支援Python,還有其他程式語言的實現,如JavaScript、Java等。
  • 可擴充套件性:可以自定義函式,以滿足特定的資料處理需求。

6、使用示例

假設有以下JSON資料:

{  
  "name": "張三",  
  "age": 26,  
  "grade": {  
    "Chinese": 96,  
    "Math": 99  
  },  
  "records": [  
    {"Chinese": 95, "Math": 100},  
    {"Chinese": 98, "Math": 98}  
  ]  
}

使用Jmespath提取name和records中的第一個元素:

import jmespath  
  
data = {  
  "name": "張三",  
  "age": 26,  
  "grade": {  
    "Chinese": 96,  
    "Math": 99  
  },  
  "records": [  
    {"Chinese": 95, "Math": 100},  
    {"Chinese": 98, "Math": 98}  
  ]  
}  
  
search_name = 'name'  
res_name = jmespath.search(search_name, data)  
print(res_name)  # 輸出: 張三  
  
search_records = 'records[0]'  
res_records = jmespath.search(search_records, data)  
print(res_records)  # 輸出: {'Chinese': 95, 'Math': 100}

使用切片和萬用字元提取所有學生的名字:

import jmespath  
  
data = {  
  "students": [  
    {"name": "Alice", "age": 20},  
    {"name": "Bob", "age": 22},  
    {"name": "Charlie", "age": 21}  
  ]  
}  
  
search_names = 'students[*].name'  
res_names = jmespath.search(search_names, data)  
print(res_names)  # 輸出: ['Alice', 'Bob', 'Charlie']

使用管道符將多個查詢操作串聯起來,如先篩選出年齡大於21的學生,然後提取他們的名字:

import jmespath  
  
data = {  
  "students": [  
    {"name": "Alice", "age": 20},  
    {"name": "Bob", "age": 22},  
    {"name": "Charlie", "age": 21}  
  ]  
}  
  
search_expr = 'students[?age > `21`].name'  
res_filtered_names = jmespath.search(search_expr, data)  
print(res_filtered_names)  # 輸出: ['Bob']

7、結論

Python Jmespath庫為處理JSON資料提供了一種簡潔而強大的解決方案。其簡潔的語法、強大的功能以及跨平臺的支援使得它成為處理複雜JSON資料的理想選擇。無論是介面自動化測試、資料處理還是資料分析,JMESPath都能發揮重要作用。

透過上述內容的學習,希望能夠幫助大家更好地理解和使用Jmespath庫,從而更高效地處理JSON資料。

相關文章