tr_ikym_blog

某Webサービスに従事する者のブログです。

jqコマンドは抽出だけでなく、JSONの編集もできる。

AWS CLIJSONをインプットしようとした時のこと。

JSONファイルを一度作って、エディターで編集する」みたいなことをしたくなかったので、 どうにかコマンドラインだけでJSONを編集出来ないかと調べていたら、jqが使えることが分かった。

これまでもjqコマンドは使っていたが、データ抽出くらいにしか使っていなかった。 JSONの編集もできるとは知らなかったので、備忘録として本記事を書く。

はじめに

jqコマンドがどんなものかは、下記のサイトを参照。

https://stedolan.github.io/jq/

JSONからのデータ抽出などのような基本的は使い方に関しては多くの記事があると思うので、他を参考にしてほしい。

この記事は、jqコマンドによるJSONの編集にフォーカスして、いくつか例を挙げる。

例1: 特定keyに紐づくvalueを上書き

|= を使用する。

$ echo '{"name": {"first": "hoge"}}' | jq '.name.first|="poyo"'
{
  "name": {
    "first": "poyo",
  }
}

なお、存在していないkeyを指定すると上書きではなく追記となる。

$ echo '{"name": {"first": "hoge"}}' | jq '.name.last|="fuga"'
{
  "name": {
    "first": "hoge",
    "last": "fuga"
  }
}

例2: 特定keyとそのvalueを削除

del() を使用する。

$ echo '{"name": {"first": "hoge"}}' | jq 'del(.name.first)'
{
  "name": {}
}

例3: 別のJSONの要素にする

map()する。なお、例のJSONの入力は配列となっている。

$ echo '[{"first": "hoge"}]' | jq 'map({name: .})'
[
  {
    "name": {
      "first": "hoge"
    }
  }
]

例4: 配列を一つにする

+ する。例が長くなるのが嫌なので、簡単に数字を例に。

$ echo '{"first": [1,2], "second": [3,4]}' | jq '.first + .second'
[
  1,
  2,
  3,
  4
]

他の使い方は

この記事では、jqコマンドを使用したJSONの編集ができる例をいくつか取り上げた。 jqコマンドのポテンシャルはとても紹介しきれないので、下記にあげるようなところを参考にしてほしい。

もしくは、

man jq

と打ってマニュアルを読むか。

qiita.com qiita.com