產品說明
jq 是一款輕量級且靈活的命令行 JSON 處理器。如果說 sed 是處理純文字的利器,那麼 jq 就是專為 JSON 結構化資料而生的變革性工具。它能將混亂、難以閱讀的 JSON 字串轉換為美觀的格式,並精確地提取、變換或過濾所需的資料。
jq 的核心力量在於其強大的過濾(Filters)與管道(Pipes)概念。你可以將一個 JSON 檔案餵給 jq,透過簡單的語法篩選出特定欄位、計算數值、甚至重構整個 JSON 結構。由於它不依賴於任何執行環境(如 Python 或 Node.js),其執行速度極快且極易部署,是 DevOps 自動化流程中不可或缺的一環。
核心特色:
- 精確提取:透過簡單的
.field語法快速存取深層嵌套的屬性。 - 輸出美化:自動將緊縮的 JSON 格式化(Pretty-print)並加上語法高亮。
- 強大的內建函數:支援映射(map)、過濾(select)、長度計算(length)等函數式操作。
- 零依賴性:以 C 語言編寫,單一執行檔即可運行,適合各種伺服器環境。
常用指令
jq 使用「過濾器」的概念來處理資料流,以下是常用的操作範例:
基礎查詢與格式化
# 美化輸出 JSON 檔案內容
cat data.json | jq '.'
# 提取特定欄位 (假設 JSON 有一個 key 叫 'name')
curl [https://api.github.com/repos/jqlang/jq](https://api.github.com/repos/jqlang/jq) | jq '.full_name'
# 提取陣列中的第一個元素
jq '.[0]' users.json
| 操作語法 | 功能說明 | 範例結果 |
|---|---|---|
. | 輸出整個 JSON (預設美化) | 格式化後的 JSON |
.foo | 獲取 foo 欄位的值 | "bar" |
.foo? | 安全存取 (若不存在不報錯) | null |
map(.name) | 對陣列中每個物件提取 name | ["User1", "User2"] |
keys | 列出 JSON 物件所有的鍵 | ["id", "status", "data"] |
進階資料變換
# 篩選特定條件的資料 (篩選價格大於 100 的項目)
cat items.json | jq '.[] | select(.price > 100)'
# 重新構造 JSON 結構 (僅保留 ID 與 名稱)
cat users.json | jq 'map({user_id: .id, user_name: .name})'
# 結合 shell 指令 (獲取長度)
cat list.json | jq '. | length'
操作介面

