jq: JSONのCLIパーサ

echo '{ "key1":"value1" }' | jq .
{
  "key1": "value1"
}

empty: 一致しない場合に、nullではなく空を返したい

echo '{"key1":"val1"}' | jq '.foo // empty'
# empty

echo '{"key1":"val1"}' | jq '.key1 // empty'
"val1"

jnv: 動的にjsonフィルタとして動作確認、調整できる


含まない項目/除外


--stream: ストリーム形式での出力

記事:


親keyを含めて出力


json中の文字列として存在するjson項目の扱い

記事:


小数点の切り捨て


LTSVとjsonを相互変換


awscliとの連携


-f: フィルタをファイルから読む

フィルタを整形し読みやすく出来る。


引数の参照

echo '{"key1":"val1","key2":"val2"}' | jq '.key1 = $arg1 | .key2 = $arg2' --arg arg1 "arg1" --arg arg2 "arg2"
{
  "key1": "arg1",
  "key2": "arg2"
}

置換


map(x), map_values(x): 各要素に同じフィルタを適用


一部の項目だけダブルクオートで括る

echo '[ { "name": "foo", "val": 10 }, { "name": "bar", "val": 20 }  ]' | jq -r '.[] | ["\""+.name+"\"", .val] | @tsv'
"foo"   10
"bar"   20

unixtimeから日付文字列へ変換


日付文字列からunixtimeへの変換


sort, sort_by: ソート


nullの扱い


del(): 指定要素の削除


gojq: Go言語版jq


一部の配列を文字列へ変換したい。


select(): 条件を指定して抽出


dictから指定キーを複数取り出す

echo '{
	"properties": [{
			"name": "instanceFamily",
			"value": "t3"
		},
		{
			"name": "productDescription",
			"value": "Linux/UNIX"
		},
		{
			"name": "instanceType",
			"value": "t3.medium"
		}
	]
}' | jq -r '.
| [
(.properties[] | select(.name == "instanceType").value),
(.properties[] | select(.name == "instanceFamily").value)
]
| @tsv'

t3.medium       t3

nullを無視して検索

select()する時にnullが混ざっていると「Cannot iterate over null (null)」が出る。


出力形式指定: csv, tsv, etc


文字列を出力に追加


スペース(whitespace)区切り


件数、合計、平均、最大、最小


インストール


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-05-08 (水) 12:10:18