🔍

JSONPath 查詢工具

使用 JSONPath 表示式查詢和提取 JSON 資料

JSON 輸入

JSONPath

範例:$.store.book[0].標題, $.store.book[*], $..author

什麼是 JSONPath

JSONPath 是 JSON 的查詢語言,類似於 XML 的 XPath。它提供標準化語法,使用路徑表示式導航和提取複雜 JSON 結構中的資料。JSONPath 使用 $ 表示根物件,. 用於子存取,[] 用於陣列索引,* 用於萬用字元,.. 用於遞迴下降。它支援過濾器 [?(@.property > 數值)]、陣列切片 [開始:end:步驟] 和多選擇器。JSONPath 廣泛用於 API 測試、資料轉換、配置查詢和 JSON 操作任務。它簡化了從深度巢狀的 JSON 中提取特定值,無需編寫複雜的 JavaScript 程式碼。

功能特點

🔍

進階查詢語法

支援完整的 JSONPath 語法,包括萬用字元 (*)、遞迴下降 (..)、陣列切片 ([開始:end])、過濾器 ([?(@.price < 10)])和多路徑選擇器
📋

路徑表示式範本

預先建立的常用查詢範本:根存取 ($)、直接子節點 ($.金鑰)、陣列項 ($.arr[*])、過濾項 ($.arr[?(@.id)])、遞迴搜尋 ($..金鑰)

即時預覽

即時執行查詢,帶語法醒目提示的 JSON 輸入和輸出,顯示比對路徑、結果計數,並在來源 JSON 中醒目提示比對節點
💾

結果匯出

將查詢結果匯出為 JSON(陣列或單一值)、表格資料的 CSV 或格式化文字,一鍵複製和下載選項

📋使用指南

1️⃣
輸入 JSON 資料
貼上或上傳要查詢的 JSON 資料
2️⃣
編寫 JSONPath
輸入 JSONPath 表示式或使用常見模式範本
3️⃣
執行查詢
執行查詢以檢視帶語法醒目提示的比對結果
4️⃣
匯出結果
以您喜歡的格式複製或下載提取的資料

📚技術介紹

📝JSONPath 語法

JSONPath 表示式以 $(根物件)開頭,使用點符號 ($.property) 或括號符號 ($['property']) 進行存取。子節點使用 . 分隔符號 ($.store.book),陣列使用 [index] 或 [*] 表示所有項。陣列切片 [開始:end:步驟] 提取範圍,如 [0:3](前 3 項)或 [-1](最後一項)。遞迴下降運算子 .. 搜尋所有層級:$..author 尋找所有 author 屬性,無論巢狀深度如何。聯合運算子 [,] 選擇多個項:$[0,2,5] 獲取特定陣列索引。

🔍過濾器表示式

過濾器使用 [?(@.condition)] 語法選擇符合條件的項。@ 表示迭代中的當前節點。比較運算子:==、!=、<、<=、>、>=。邏輯運算子:&& (and)、|| (or)、! (不)。範例:[?(@.price < 10)] 選擇價格低於 10 的項;[?(@.category == 'fiction' && @.price < 20)] 組合條件。正規表示式比對:[?(@.名稱 =~ /pattern/)] 按正規過濾。過濾器可以使用 $ 參考根以進行跨階層比較:[?(@.price < $.maxPrice)]。

🔧實作變體

JSONPath 有多個實作,語法略有不同:Goessner 的原始版本(JavaScript)、Jayway(Java)、jsonpath-ng(Python)。差異包括過濾器運算子(有些使用 @ vs $)、正規支援、指令碼表示式和函式擴充。一些實作新增了函式,如 @.length、@.min()、@.max() 用於彙總。指令碼表示式 [(@.price * @.quantity)] 啟用計算。父運算子 ^ 和當前路徑 ~ 提供上下文。始終檢查目標實作的文件以瞭解支援的功能和語法特性。

🎯實際應用

JSONPath 在 API 回應解析中表現出色,從 REST API JSON 回應中提取特定欄位,無需完全反序列化。配置管理使用 JSONPath 查詢和更新巢狀配置值。資料轉換管線使用 JSONPath 將來源 JSON 對應到目標模式。測試框架(Postman、REST Assured)使用 JSONPath 斷言驗證回應結構和值。日誌分析從 JSON 格式的日誌中提取相關欄位。GraphQL 和 OpenAPI 工具使用 JSONPath 進行模式遍歷和驗證。效能:對於大型 JSON,考慮串流解析器或資料庫(MongoDB 的查詢語法、PostgreSQL 的 jsonb_path_query)。

常見問題

為什麼查詢沒有結果?

確認路徑以 $ 開頭、陣列索引正確、欄位名稱拼寫無誤。可先用簡短路徑逐步驗證。
💬

如何在所有層級尋找某個鍵?

使用遞迴下降運算子:$..author 會在所有層級尋找 author。
🔍

過濾器語法怎麼寫?

使用 [?(@.price < 10)],@ 表示當前項目;可用 &&、|| 組合條件,如 [?(@.category=='book' && @.price<20)]。
💡

空結果與 null 有何不同?

空結果代表沒有匹配;null 代表匹配項的值為 null。請檢查來源資料與路徑。
📚

大型 JSON 查詢很慢怎麼辦?

避免過度使用 ..;先縮小搜尋範圍再過濾,必要時將資料分段或在後端預處理。

🔗相關文件

User Comments

0 / 2000
Loading...