跳至正文

JSON Path Tester

測試 JSONPath 表達式並從 JSON 資料中提取所需值的工具。API 回應解析和資料分析的必備工具!

Result will appear here...

Common Patterns

Root
$
Root object
All Books
$.store.book[*]
All books in store
First Book
$.store.book[0]
First book
Last Book
$.store.book[-1]
Last book
Book Titles
$.store.book[*].title
All book titles
Books < $10
$.store.book[?(@.price < 10)]
Books cheaper than $10
Books with ISBN
$.store.book[?(@.isbn)]
Books with ISBN
All Prices
$.store..price
All prices (recursive)

Syntax Guide:

  • $ - Root object
  • @ - Current object
  • . or [] - Child operator
  • .. - Recursive descent
  • * - Wildcard
  • [start:end] - Array slice
  • [?(<expr>)] - Filter expression

什麼是 JSONPath?

JSONPath 是一種用於查詢 JSON 資料結構中值的表達式語言。就像 XPath 對於 XML 一樣,JSONPath 允許您從 JSON 中提取特定資料。

主要語法

基本運算子

運算子說明範例
$根物件$
@當前物件(過濾器內部)@.price
.[]子元素$.store.book
..遞迴搜尋$..price
*萬用字元$.store.*
[n]陣列索引$.store.book[0]
[start:end]陣列切片$.store.book[0:2]
[?(<expr>)]過濾器表達式$..book[?(@.price < 10)]

陣列索引

// 第一個元素
$.store.book[0]

// 最後一個元素
$.store.book[-1]

// 範圍(從 0 到索引 2 之前)
$.store.book[0:2]

// 所有元素
$.store.book[*]

過濾器表達式

// 價格低於 10 的書籍
$.store.book[?(@.price < 10)]

// 有 ISBN 的書籍
$.store.book[?(@.isbn)]

// 類別為 fiction 的書籍
$.store.book[?(@.category === 'fiction')]

// 標題中包含特定單字的書籍
$.store.book[?(@.title.includes('Moby'))]

實際使用範例

從 API 回應中提取資料

// API 回應
{
"users": [
{ "id": 1, "name": "John", "active": true },
{ "id": 2, "name": "Jane", "active": false },
{ "id": 3, "name": "Bob", "active": true }
]
}

// 僅提取活躍使用者
$.users[?(@.active === true)]

// 所有使用者名稱
$.users[*].name

瀏覽巢狀資料

// 複雜的 JSON
{
"company": {
"departments": [
{
"name": "Engineering",
"employees": [
{ "name": "Alice", "salary": 100000 },
{ "name": "Bob", "salary": 90000 }
]
},
{
"name": "Sales",
"employees": [
{ "name": "Charlie", "salary": 80000 }
]
}
]
}
}

// 所有員工的薪資
$..employees[*].salary

// 薪資 >= 90000 的員工
$..employees[?(@.salary >= 90000)]

處理陣列資料

// 電商資料
{
"products": [
{ "name": "Laptop", "price": 1000, "stock": 5 },
{ "name": "Mouse", "price": 20, "stock": 0 },
{ "name": "Keyboard", "price": 50, "stock": 10 }
]
}

// 有庫存的產品
$.products[?(@.stock > 0)]

// 價格範圍(20 ~ 100)
$.products[?(@.price >= 20 && @.price <= 100)]

使用場景

1. API 測試和除錯

// 從 GraphQL 回應中提取錯誤訊息
$.errors[*].message

// REST API 分頁資料
$.data.items[*]

2. 資料分析

// 按特定條件過濾資料
$..transactions[?(@.amount > 1000)]

// 收集統計資料
$..metrics[*].value

3. 設定檔解析

// 提取特定環境設定
$.environments[?(@.name === 'production')]

// 已啟用的功能標誌
$.features[?(@.enabled === true)].name

4. 日誌分析

// 僅過濾錯誤日誌
$.logs[?(@.level === 'error')]

// 特定時間範圍內的日誌
$.logs[?(@.timestamp > 1234567890)]

比較運算子

JSONPath 過濾器中可用的運算子:

  • === - 等於
  • !== - 不等於
  • < - 小於
  • <= - 小於或等於
  • > - 大於
  • >= - 大於或等於
  • && - AND
  • || - OR

使用技巧

1. 分步測試

將複雜路徑分解測試:

// 步驟 1: $.store
// 步驟 2: $.store.book
// 步驟 3: $.store.book[*]
// 步驟 4: $.store.book[*].title

2. 使用遞迴搜尋

當結構未知時使用 ..:

// 尋找所有 price 欄位
$..price

3. 組合過濾器

組合多個條件:

$..book[?(@.price < 10 && @.category === 'fiction')]

注意事項

  • JSONPath 表達式區分大小寫
  • 在過濾器表達式內部使用 @ 來參照當前物件
  • 陣列切片的工作方式類似於 Python(包含開始,不包含結束)
  • 不同實作之間的語法可能略有不同

相關工具

其他資源