如何使用 jq 汇总多个文件中的 属性?

How can I summarize a property across multiple files with jq?

我有很多 JSON 个文件,如下所示:

{
  "property": "value1",
  ...
}

我想要的是一个如下所示的输出文件:

{
  "<filename1>": "<value1>", 
  "<filename2>": "<value2>", 
  "<filename3>": "<value3>", 
  ...
}

这可以通过两次 jq 调用和一个 shell 管道来实现:

jq '{(input_filename):.property}' * | jq -s add

但是,我想知道这是否可以通过单个 jq 调用(或任何其他更简单的方法)实现。

我目前正在使用 jq 版本 1.5-1 以防相关。

结合使用 inputs-n 选项可以顺序访问所有输入文件。

直接类推,您可以使用 [inputs] 创建由 -s 选项创建的数组,然后像以前一样 add 增加项目:

jq -n '[inputs | {(input_filename): .property}] | add' *

但以更直接的方式,您可以使用 reduce 迭代构建结果对象:

jq -n 'reduce inputs as $in ({}; .[input_filename] = $in.property)' *