jq

輕量級命令列 JSON 處理器

基本用法

Pretty Print

預設情況下,jq 會美化輸出

jq '.' seaCreatures.json

範例資料

jsonvar='[
  {
    "name": "Sammy",
    "type": "shark",
    "clams": 5
  },
  {
    "name": "Bubbles",
    "type": "orca",
    "clams": 3
  },
  {
    "name": "Splish",
    "type": "dolphin",
    "clams": 2
  },
  {
    "name": "Splash",
    "type": "dolphin",
    "clams": 2
  }
]'

取得部分值

jq '.[].name' sea-creatures.json
# 輸出:
# "Sammy"
# "Bubbles"
# "Splish"
# "Splash"

將結果放入陣列

jq '[.[].name]' sea-creatures.json
# [
#   "Sammy",
#   "Bubbles",
#   "Splish",
#   "Splash"
# ]

-r 選項

raw output (移除引號)

jq -r '.[].name' sea-creatures.json
# Sammy
# Bubbles
# Splish
# Splash

計算欄位

jq '[.[] | .clams]' sea-creatures.json
# [5, 3, 2, 2]
jq 'map(.clams)' sea-creatures.json
# [5, 3, 2, 2]

map() 函數

使用 map 迭代,然後用 add 加總

jq 'map(.clams) | add' sea-creatures.json
# 12

map + select + add

jq 'map(.type)' sea-creatures.json
# ["shark", "orca", "dolphin", "dolphin"]
jq 'map(select(.type == "dolphin"))' sea-creatures.json
# [
#   {"name": "Splish", "type": "dolphin", "clams": 2},
#   {"name": "Splash", "type": "dolphin", "clams": 2}
# ]
jq 'map(select(.type == "dolphin").clams)' sea-creatures.json
# [2, 2]
jq 'map(select(.type == "dolphin").clams) | add' sea-creatures.json
# 4

轉換資料結構

jq '{ creatures: map(.name), totalClams: map(.clams) | add, totalDolphinClams: map(select(.type == "dolphin").clams) | add }' sea-creatures.json
# {
#   "creatures": ["Sammy", "Bubbles", "Splish", "Splash"],
#   "totalClams": 12,
#   "totalDolphinClams": 4
# }

其他選項

-c

緊湊輸出 (單行)

jq -c '.' data.json

length

計算 JSON 長度

jq length data.json