Skip to content

jq

命令列 JSON 處理器

軟體分類 生產力 / 系統工具
軟體標籤
開發廠商 Stephen Dolan
Stars
33.8k
Forks
1.7k
License
MIT
Version
v1.7.1
Update
2026-03-11
OS

產品說明

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'

操作介面