使用jq,将对象数组转换为具有命名键的对象

Mik*_*e N 15 json key object command-line-interface jq

给定一个json文件格式为:

[
 {
  name : "A",
  value : "1"
 },
 {
  name : "B",
  value : "5"
 },
 {
  name : "E",
  value : "8"
 }
]
Run Code Online (Sandbox Code Playgroud)

我如何使用jq将其转换为这样的东西:

{
 "A" : {
   name : "A",
   value : "1"
 },
 "B" : {
  name : "B",
  value : "5"
 },
 "E" : {
  name : "E",
  value : "8"
 }
}
Run Code Online (Sandbox Code Playgroud)

jq '{(.[].name) : "the name"}' 'myfile.json' 用[] .name键获取一个对象,但如何将对象分配给它?

pea*_*eak 24

map( { (.name|tostring): . } ) | add
Run Code Online (Sandbox Code Playgroud)

(这tostring是为了安全/稳健.)

INDEX/1

如果您的jq已经INDEX/1(在1.5版发布之后推出),您可以简单地写:

INDEX(.name)
Run Code Online (Sandbox Code Playgroud)

  • 但最后需要一个“add”,因为他希望结果作为一个对象。 (2认同)

Jef*_*ado 10

只需构建一个遍历数组中项目的新对象.使用name作为键将项添加到对象.

reduce .[] as $i ({}; .[$i.name] = $i)
Run Code Online (Sandbox Code Playgroud)