JSONPath 查詢
最後更新:2026年10月2日
對 JSON 文件執行 JSONPath 表示式,查看每一個符合及其所在的路徑。查詢在你的瀏覽器中執行,文件不會被傳送到任何地方。
查詢語言能做什麼
JSONPath 之於 JSON,就像資料夾路徑之於檔案系統:用簡潔的方式說明你要哪些值。$ 是文件根,.name 進入某個屬性,[…] 在陣列中選擇。
- 子節點:
$.store.bicycle.color,或名稱需要加引號時用$['store']['bicycle']['color']。 - 萬用字元:
$.store.book[*].title取每本書的標題;$.store.*取 store 物件的每個值。 - 遞迴下降:
$..price會在任意深度找到price。很好用,也容易符合過多——見下文。 - 索引與切片:
[0]、[-1]表示最後一項、[0:2]取前兩項、[0:5:2]依步長取。 - 聯集:
[0,2]與['book','bicycle']可一次選取多個。 - 篩選器:
[?(@.price < 10)]保留價格低於十的項目,運算子是== != < <= > >=,可用&&與||組合。
篩選器判斷的是存在性,而不是真值
篩選器裡單獨的一個路徑問的是該屬性是否存在。所以 [?(@.inStock)] 會符合 inStock 為 false 的項目,因為該屬性存在——這是 RFC 9535 的解讀。當你想判斷值本身時,就明確寫出來:[?(@.inStock == true)]。這是 JSONPath 最常見的意外,屬於語言本身的特性,而不是本工具的問題。
它刻意不做的事
不實作篩選器函式(如 length()、match()、search()),也不支援正規表示式、括號中的指令碼表示式,以及某些函式庫加入的父節點/兄弟節點擴充。使用這些的查詢會被拒絕並給出提示,而不是悄悄回傳錯誤結果——本頁明示了它支援什麼,所以這裡的「通過」就是字面意思。
常見問題
支援哪些 JSONPath 語法?
根 $、用 .name 或 ['name'] 存取子節點、萬用字元 .* 與 [*]、遞迴下降 ..name 與 ..*、陣列索引(含負數)、切片 [start:end:step]、聯集如 [0,1] 與 ['a','b'],以及篩選器 [?(@.price < 10)],運算子為 == != < <= > >=,可用 && 與 || 組合。
不支援哪些?
不實作篩選器函式(如 length()、match()、search()),也不支援正規表示式、括號中的指令碼表示式,以及某些函式庫加入的 JSONPath 擴充(如父節點/兄弟節點參照)。使用這些的查詢會被拒絕,而不是悄悄回傳錯誤結果。
為什麼 ?(@.inStock) 會符合 inStock 為 false 的項目?
因為篩選器裡單獨的一個路徑是存在性判斷,而不是真值判斷:它問的是這個屬性在不在,而設為 false 的屬性依然在。要判斷真值請明確寫 ?(@.inStock == true)。這是 RFC 9535 對篩選器的解讀。
符合結果會告訴我它來自哪裡嗎?
會。每個結果都會列出它所在的路徑,採用與撰寫查詢相同的點號與方括號寫法,因此可以把這個路徑直接貼回查詢或其他 JSON 工具中使用。
我的文件會被上傳嗎?
不會。文件在你的瀏覽器中以 JSON.parse 解析,查詢在記憶體中執行。不會上傳任何內容,中斷網路後頁面依然可用。
為什麼 $..price 回傳的比我預期的多?
遞迴下降會走訪文件的每一層,因此 ..price 會在任何位置找到 price 屬性——無論在陣列裡、巢狀物件裡還是不相關的分支裡。要收窄範圍,請用更多路徑來限定,例如 $.store.book[*].price。
想改用 Schema 檢查文件?JSON Schema 可以做到。發現錯誤?聯絡我們。