お仕事をしているとJSONを取り扱うことが良くあります。例えばAPIのレスポンスがJSONだったり、JSONファイルを取込んだりします。
そんなJSONを確認するためにちょっと加工したいこともよくあることです。
その時に便利なのがjqコマンドですが、使い方を忘れたとき用にサンプルやサイトのリンクを少しずつ書き溜めていきます。
参考になるサイト
- jqコマンドをインストール
- RedmineのRest APIをcurlとjqで使ってみたサンプル - Qiita
- Kintoneのアプリのアクセス権をBashでCSV出力する方法 - 助っ人サービス for kintone
- jqコマンドで文字化けした時の対応方法 - Qiita
- bashでjqを使ってJSONの配列をループさせる - Qiita
- curlでQiitaOrganizationのユーザー一覧を取得する方法 - Qiita
配列の外と中の要素を並べてみたい
- やりたいこと : 配列の外にある「out」と配列の中にある「aryIn1」「aryIn2」の値をCSVで横に並べてみたい
- イメージ :
"abcdefg","002","100"
- イメージ :
sample.json
[
{
"out": "abcdefg",
...省略...
"ary": [
{
"aryIn1": "002",
"aryIn2": "100",
...省略...
},
{...省略...}
]
},
{...省略...}
]
- jqでやる方法
- 一番外側の配列を抜出す :
.[]
- 「out」「ary配列」を抜き出してオブジェクトにする :
{out: .out, ary: .ary[]}
- 「out」と「ary配列の中のaryIn1とaryIn2」を抜出て配列にする :
[.out, (.ary.aryIn1), (.ary.aryIn2)]
- CSV形式にする :
@csv
- (必要であれば)リダイレクトしてファイルへ出力する :
> out.csv
- 一番外側の配列を抜出す :
配列の外と中の要素を並べてみる
$ cat sample.json | jq -r '.[] | {out: .out, ary: .ary[]} | [.out, (.ary.aryIn1), (.ary.aryIn2)] | @csv'
"abcdefg","002","100"
"abcdefg","002","685"
"abcdefg","030","687"
"abcdefg","030","841"
"abcdefg","030","028"
"skrdfgu","030","687"
"skrdfgu","030","841"
"skrdfgu","030","028"
...