配列の1:1マッピングとしてJSONにエクスポートされたSQL結果セットがあります。
例えば
[
{
"subject": "Accounting",
"level": "A Level"
},
{
"subject": "Accounting",
"level": "IB"
},
{
"subject": "Accounting",
"level": "University"
},
{
"subject": "Accounting",
"level": "GCSE"
},
{
"subject": "Accounting",
"level": "Mentoring"
},
{
"subject": "Accounting",
"level": "13 Plus"
},
{
"subject": "Accounting",
"level": "11 Plus"
},
etc.....
次のようにレベルをトピックキーに結合したいと思います。
[
"Accounting": ["A Level", "IB", "University"],
"Foo": ["Foo Intro", "Foo Basics", "Intermediate Foo"]
]
メモ:匿名オブジェクトなし
jqを使用してこれをどのように達成できますか?
ベストアンサー1
与えられた
$ jq '.' file.json
[
{
"subject": "Accounting",
"level": "A Level"
},
{
"subject": "Foo",
"level": "IB"
},
{
"subject": "Accounting",
"level": "University"
},
{
"subject": "Foo",
"level": "GCSE"
},
{
"subject": "Accounting",
"level": "Mentoring"
},
{
"subject": "Accounting",
"level": "13 Plus"
},
{
"subject": "Foo",
"level": "11 Plus"
}
]
それではお金を借りてください。要約データを使用してjq配列の外観を変更する
$ jq 'reduce .[] as $d (null; .[$d.subject] += [$d.level])' file.json
{
"Accounting": [
"A Level",
"University",
"Mentoring",
"13 Plus"
],
"Foo": [
"IB",
"GCSE",
"11 Plus"
]
}
注:外部レイヤーは配列ではないオブジェクトです(予想される出力で見られるように、有効なJSONではないようです)。