什麼時候會需要擷取欄位
- 後端回傳兩百筆訂單,你只想確認其中的 id 有沒有重複。
- 要把一份 API 回應裡的 email 或電話整列貼進試算表。
- 要從巢狀結構把每一筆的某個子欄位攤平成一維陣列,直接當成測試資料。
- 想知道某個欄位在哪幾筆資料裡根本不存在。
- 手上沒有 jq,或只是不想為了看一個欄位開終端機。
這個工具做什麼
在左邊貼上一個 JSON 陣列,輸入一個欄位路徑,右邊就會得到一份只包含該路徑的值的攤平陣列。 最簡單的例子:貼上 [{"name": "John", "age": 14}, {"name": "Mary", "age": 20}], 輸入 name,結果就是 ["John", "Mary"]。邊改邊算,不需要按任何按鈕。
路徑語法對照表
| 語法 | 意義 | 範例 |
|---|---|---|
name / .name | 一般物件屬性。 | address.city |
[0] | 陣列索引。 | tags[0] |
['key'] / ["key"] | 名稱含空格、破折號或句點的屬性。 | meta['created-at'] |
[*] | 陣列中的每一個元素,攤平後輸出。 | roles[*].name |
這些語法可以組合使用。路徑是從陣列的每個元素開始,由左到右一步步往下走。
由淺到深的三個例子
單層欄位
輸入 [{"name": "John", "age": 14}, {"name": "Mary", "age": 20}],路徑 name,得到 ["John", "Mary"]。
巢狀欄位
輸入 [{"name": "John", "address": {"city": "Taipei"}}],路徑 address.city,得到 ["Taipei"]。每個句點往物件裡多走一層。
萬用字元展開
輸入 [{"roles": [{"name": "admin"}, {"name": "editor"}]}, {"name": "Alan"}],路徑 roles[*].name,得到 ["admin", "editor"]。第一筆貢獻兩個值, 第二筆完全沒有 roles,貢獻 0 個值——輸出筆數因此可能比輸入多,也可能比輸入少。
欄位缺少時會怎樣
缺少的值會被跳過,不會補上 null。只要某個元素沒有這個欄位,或路徑走到某一步時 型別不對,那筆元素就對輸出貢獻 0 筆值。結果區上方的統計列——「擷取到 N 筆值 —— 略過 K 筆中的 M 筆」——把這件事講清楚,不用自己猜輸出筆數為什麼跟輸入不一樣。
為什麼貼的 JSON 一定要是陣列
這個工具的核心是把同一個路徑套用在每一個元素上再收集結果,所以最外層必須是陣列。 如果手上只有單一物件,用中括號包起來就好——{"name": "John"} 變成 [{"name": "John"}],路徑照樣能用。
你輸入的內容會不會離開瀏覽器
不會。解析與擷取都在你的瀏覽器裡完成,貼上的內容不會被送到任何地方,這點跟站上其他工具 一樣,細節見隱私權政策。
常見問題
- 可以一次擷取多個欄位嗎?
- 沒辦法一次做完。換一個路徑重新輸入即可,整個運算是即時的,來回切換不費力。
- 支援完整的 JSONPath 嗎?
- 不支援。這是一套刻意做小的子集:點記法、bracket 索引、加引號的 key,加上一個萬用字元,沒有篩選條件,也沒有遞迴搜尋。
- 陣列裡每個元素的形狀不一致怎麼辦?
- 每個元素各自獨立判斷,缺欄位的那筆就跳過,不影響其他筆,也不會中斷整個擷取。
- 可以匯出 CSV 嗎?
- 不行。這個工具只擷取單一欄位,結果本來就是一份合法的 JSON 陣列,所以只提供 JSON。
- 貼上的 JSON 有大小限制嗎?
- 只受瀏覽器分頁的記憶體限制。貼太大的內容會讓輸入變得比較卡,因為每次修改都會即時重新解析。