jqコマンドでJSONオブジェクトのキーと値を入れ替える方法
Nid: 813
サンプルデータ
$ cat s.json [ { "name": "看護師", "keys": ["A", "B"] }, { "name": "調理師", "keys": ["A", "C"] }, { "name": "薬剤師", "keys": ["C"] }, { "name": "宅建士", "keys": ["A", "B", "C"] } ]
値とキーのペアに分解
$ jq 'map({ name, key: .keys[] })' s.json [ { "name": "看護師", "key": "A" }, { "name": "看護師", "key": "B" }, { "name": "調理師", "key": "A" }, { "name": "調理師", "key": "C" }, { "name": "薬剤師", "key": "C" }, { "name": "宅建士", "key": "A" }, { "name": "宅建士", "key": "B" }, { "name": "宅建士", "key": "C" } ]
キーでグルーピング
$ jq 'map({ name, key: .keys[] }) | group_by(.key)' s.json [ [ { "name": "看護師", "key": "A" }, { "name": "調理師", "key": "A" }, { "name": "宅建士", "key": "A" } ], [ { "name": "看護師", "key": "B" }, { "name": "宅建士", "key": "B" } ], [ { "name": "調理師", "key": "C" }, { "name": "薬剤師", "key": "C" }, { "name": "宅建士", "key": "C" } ] ]
mapでまとめる
$ jq 'map({ name, key: .keys[] }) | group_by(.key) | map({ key: .[0].key, value: map(.name) })' s.json [ { "key": "A", "value": [ "看護師", "調理師", "宅建士" ] }, { "key": "B", "value": [ "看護師", "宅建士" ] }, { "key": "C", "value": [ "調理師", "薬剤師", "宅建士" ] } ]