keyが動的に決まるjsonをjqコマンドで扱うには
このようにkeyの部分が動的に決まるjsonをときどき見ることがある。
{
"なんか": 1,
"動的に": 2,
"決まる": 3
}
上記のようなjsonからkeyの部分を取り出すにはどうすればよいだろうか?
以下のような出力が欲しい。
なんか
動的に
決まる
jqコマンドのto_entriesクエリを使うと良い。
以下のように、 {"k": "v"} 形式のjsonを {"key": "k", "value": "v"}形式に変換できる。
$ cat hoge.json | jq '. | to_entries[]'
{
"key": "なんか",
"value": 1
}
{
"key": "動的に",
"value": 2
}
{
"key": "決まる",
"value": 3
}
あとはkeyを抽出すれば完了である。
$ cat hoge.json | jq -r '. | to_entries[].key'
なんか
動的に
決まる
$
なお、以下のようにkeysを使っても良い。
$ cat hoge.json | jq -r '. | keys[]'
なんか
動的に
決まる
$
ただし、keys は keyの配列を返すので、key1つずつについて処理するクエリを書くのに向いていない 。
先に紹介した to_entries[] | .key の書き方であれば、以下のようにkey1つずつについて処理できるのでおすすめである。
$ cat hoge.json | jq -r '. | to_entries[] | .key + "の値は " + (.value | tostring)'
なんかの値は 1
動的にの値は 2
決まるの値は 3
$
この記事が気に入ったらサポートをしてみませんか?