jqを使用して、オブジェクトの配列を名前付きキーを持つオブジェクトに変換します
次のような形式のjsonファイルがあるとします。
_[
{
name : "A",
value : "1"
},
{
name : "B",
value : "5"
},
{
name : "E",
value : "8"
}
]
_
Jqを使用して次のように変換するにはどうすればよいですか。
_{
"A" : {
name : "A",
value : "1"
},
"B" : {
name : "B",
value : "5"
},
"E" : {
name : "E",
value : "8"
}
}
_
jq '{(.[].name) : "the name"}' 'myfile.json'
は[] .nameキーを持つオブジェクトを取得しますが、それにオブジェクトを割り当てるにはどうすればよいですか?
map( { (.name|tostring): . } ) | add
(tostring
は安全性/堅牢性のためのものです。)
INDEX/1
あなたのjqがINDEX/1
(バージョン1.5のリリース後に導入)、次のように簡単に記述できます。
INDEX(.name)
配列の項目を通過する新しいオブジェクトを作成するだけです。 name
をキーとしてオブジェクトにアイテムを追加します。
reduce .[] as $i ({}; .[$i.name] = $i)