web-dev-qa-db-ja.com

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キーを持つオブジェクトを取得しますが、それにオブジェクトを割り当てるにはどうすればよいですか?

17
Mike N
map( { (.name|tostring): . } ) | add

tostringは安全性/堅牢性のためのものです。)

INDEX/1

あなたのjqがINDEX/1(バージョン1.5のリリース後に導入)、次のように簡単に記述できます。

INDEX(.name)
27
peak

配列の項目を通過する新しいオブジェクトを作成するだけです。 nameをキーとしてオブジェクトにアイテムを追加します。

reduce .[] as $i ({}; .[$i.name] = $i)
13
Jeff Mercado