jq from_entries 的变体,它整理每个键出现的值

variant of jq from_entries that collate values for each key occurrence

我可以将 jq 用于 运行 一个过滤器,其行为类似于 from_entries,唯一的区别是,如果遇到同一键的多个条目,它将把这些值整理成一个数组,而不是只使用最后一个值?

如果是这样,什么过滤器可以实现这一点?例如,如果我的输入是:

[
  {
    "key": "a",
    "value": 1
  },
  {
    "key": "b",
    "value": 2
  },
  {
    "key": "a",
    "value": 3
  },
  {
    "key": "b",
    "value": 4
  }
]

那么所需的输出将是:

{ "a": [1,3], "b": [2,4] }

请注意,单独使用 'from_entries' 作为过滤器,结果值只是最后一个值(即 { "a": 3, "b": 4 }

使用您的示例和 merge.jq 中的以下行:

def merge_entries:
  reduce .[] as $pair ({}; .[$pair["key"]] += [$pair["value"]] );

merge_entries

调用:jq -c -f merge.jq 产量:

{"a":[1,3],"b":[2,4]}

您也可以使用调用:

jq 'reduce .[] as $p ({}; .[$p.key] += [$p.value])'