jq - 将对象列表转换为汇总对象

mun*_*ish 5 arrays json jq

我有这样的JSON数据:

[
  {
    "tone_id": "anger",
    "score": 0.012,
    "tone_name": "Anger"
  },
  {
    "tone_id": "disgust",
    "score": 0.002,
    "tone_name": "Disgust"
  },
  {
    "tone_id": "fear",
    "score": 0.14,
    "tone_name": "Fear"
  },
  {
    "tone_id": "joy",
    "score": 0.42,
    "tone_name": "Joy"
  }
]
Run Code Online (Sandbox Code Playgroud)

我想将它转换为类似以下内容jq:

{
  "anger": 0.012,
  "disgust": 0.002,
  "fear": 0.14,
  "joy": 0.42
}
Run Code Online (Sandbox Code Playgroud)

我能做的最好是:

cat result.json | jq '.[] | { (.tone_id): .score }'
Run Code Online (Sandbox Code Playgroud)

给出了以下内容:

{
  "anger": 0.012
}
{
  "disgust": 0.002
}
{
  "fear": 0.14
}
{
  "joy": 0.42
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用其他方法轻松完成此操作.只是想知道是否可以使用jq单线程?

pea*_*eak 6

单调用单行:

 jq 'map( {(.tone_id): .score} ) | add'
Run Code Online (Sandbox Code Playgroud)

(你也可以.[] | { (.tone_id): .score }在传递之前包括方括号add- 这两种方法是等价的.)