如何使用 jq 命令列處理 JSON:安裝、篩選欄位、映射陣列與 curl 管道
安裝 jq,提取 JSON 欄位、映射陣列,並用 curl 管道快速查看 API 回應。
除錯 REST API 或讀 CI 日誌時,jq 讓你在終端直接篩選和變換 JSON,不必把整段回應貼進編輯器。本教學走 macOS、Linux 與 Windows 的官方安裝路徑,並示範欄位提取、陣列映射與 curl 管道,面向 hereink 讀者常用的命令列工作流。
檢索詞是如何使用 jq 處理 JSON 並與 curl 管道。讀完應能安裝 jq、用 .key 取欄位、用 map 處理陣列,並把 API 回應縮成幾行可讀輸出。
jq 解決什麼問題
比 python -m json.tool 更靈活
內建 json.tool 只能美化。jq 可以只列印 .data.items[0].id、過濾陣列、或把巢狀結構壓平,適合腳本和一次性除錯。
與 curl 天然搭檔
API 回應往往幾百行。管道末尾加 jq '.field',終端只留你關心的鍵,減少捲動和複製貼上。
確認版本:
jq --version。官方站點與手冊:jqlang.org,GitHub 組織jqlang/jq。
在三大系統安裝 jq
- 1macOS(Homebrew)
執行
brew install jq。驗證:which jq與jq --version。Apple Silicon 與 Intel 共用同一公式。 - 2Linux(發行版套件)
Debian/Ubuntu:
sudo apt update && sudo apt install jq。Fedora:sudo dnf install jq。Arch:sudo pacman -S jq。若倉庫版本過舊,可從 GitHub Releases 下載靜態二進位。 - 3Windows
PowerShell:
winget install jqlang.jq,或 Chocolatey:choco install jq。新開終端後跑jq --version。 - 4第一條過濾器
測試:
echo '{"ok":true,"n":3}' | jq .ok應輸出true。全物件美化:echo '{"a":1}' | jq .。
篩選欄位與映射陣列
echo '{"user":{"name":"Lin","role":"admin"}}' | jq .user.name
echo '{"items":[{"id":1},{"id":2}]}' | jq '.items[]'
echo '{"items":[{"id":1,"x":0},{"id":2,"x":1}]}' | jq '.items | map(.id)'
echo '[{"k":"a","v":1},{"k":"b","v":2}]' | jq '[.[] | select(.v > 1)]'
echo '{"a":1,"b":2,"c":3}' | jq '{a,b}'過濾器用單引號包住,避免 shell 展開 $。點號 . 表示目前 JSON 值;[] 迭代陣列。
與 curl 管道
| 場景 | 命令範例 | 說明 |
|---|---|---|
| 公開 API 元資料 | curl -s https://api.github.com/repos/jqlang/jq | jq '{name, description, stars: .stargazers_count}' | 只留 name、description、stars |
| 腳本用純文字 | curl -s … | jq -r '.token' | -r 去掉 JSON 字串引號 |
| 緊湊日誌行 | curl -s … | jq -c '.items[]' | 每元素一行,便於 rg 再搜 |
| 私有 API | curl -s -H "Authorization: Bearer $TOKEN" … | jq . | jq 只處理回應體 |
- 適合
- 快速查看 REST 回應欄位、過濾容器日誌裡的 JSON 行、CI 裡解析建置元資料。
- 不適合
- 編輯並寫回大 JSON 檔;非 JSON 文字(先用
grep/rg)。
jq: parse error 是什麼意思?
輸入不是合法 JSON。用 jq . 單獨測輸入;對 NDJSON 用 jq -s 或逐行處理。
Windows 上 jq 找不到命令?
安裝後重啟終端。執行 where jq。winget/Chocolatey 通常會自動加入 PATH。
jq 和 yq 一樣嗎?
不一樣。jq 專用於 JSON。YAML 需 yq 或先轉格式。
欄位對齊後畫一張圖
終端裡理清 API 結構後,服務邊界仍適合攤在同一張白板上。見 如何建立空間。