跳到主要內容

JSON 欄位擷取器 —— 從 JSON 陣列取出一個欄位

貼上 JSON 陣列與欄位路徑,支援巢狀與萬用字元,取出攤平後的值陣列。全程在瀏覽器內完成,內容不會上傳。 後端回傳的欄位太多,而你只想把其中一個欄位的值整列拿出來貼進試算表或測試資料,這一頁就是為了那件事做的。

什麼時候會需要擷取欄位

  • 後端回傳兩百筆訂單,你只想確認其中的 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 有大小限制嗎?
只受瀏覽器分頁的記憶體限制。貼太大的內容會讓輸入變得比較卡,因為每次修改都會即時重新解析。