← 返回 JSON 工具

JSONPath 查詢

最後更新:2026年10月2日

對 JSON 文件執行 JSONPath 表示式,查看每一個符合及其所在的路徑。查詢在你的瀏覽器中執行,文件不會被傳送到任何地方。

在瀏覽器中執行 無需上傳 結果帶路徑 支援篩選器與切片 開源(MIT)

查詢語言能做什麼

JSONPath 之於 JSON,就像資料夾路徑之於檔案系統:用簡潔的方式說明你要哪些值。$ 是文件根,.name 進入某個屬性,[…] 在陣列中選擇。

篩選器判斷的是存在性,而不是真值

篩選器裡單獨的一個路徑問的是該屬性是否存在。所以 [?(@.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 可以做到。發現錯誤?聯絡我們。