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": [
"調理師",
"薬剤師",
"宅建士"
]
}
]