将多个JSON对象连接到一个数组中

将多个JSON对象连接到一个数组中,json,jq,Json,Jq,我有一个命令,可以输出多个简单的json对象,如下所示(出于开发目的,以前通过管道传输到文件foo.txt): 现在我想把它格式化成这样: { "a": ["b", "e", "f"] } 我很确定可以用jq完成,但我能得到的只有以下几点: $ cat foo.txt |jq -n '.a |= [inputs]' { "a": [ { "a":

我有一个命令,可以输出多个简单的json对象,如下所示(出于开发目的,以前通过管道传输到文件
foo.txt
):

现在我想把它格式化成这样:

{
  "a": ["b", "e", "f"]
}
我很确定可以用
jq
完成,但我能得到的只有以下几点:

$ cat foo.txt |jq -n '.a |= [inputs]'
{
  "a": [
    {
      "a": "b"
    },
    {
      "a": "e"
    },
    {
      "a": "f"
    }
  ]
}

有什么提示吗?

我会使用以下方法:

jq --slurp --compact-output '{ a: map(.a) }' foo.txt
--slurp
使
jq
读取JSON对象序列作为这些对象的数组。我们将此对象数组映射到其
.a
字段的值数组,最后返回一个将此数组作为其
.a
字段的对象


你可以。

你真的很接近。JQ不会从输入对象中提取
.a
,除非您明确声明

$ jq -n '.a = [inputs.a]' foo.txt
{
  "a": [
    "b",
    "e",
    "f"
  ]
}

.a
常量还是可以更改/动态?
a
是常量,没有更改。
输入。如果我没有弄错,a
将不起作用,
输入是一个数组,您无法访问其属性<代码>[输入|映射(.a)]
可以正常工作though@Aaron不是
inputs
是一个流,OP刚刚忘记了
.a
。糟糕的是,我从自己的示例中进行了测试,并保留了
--slurp
,这使得
inputs
为空,并引发了一个错误,可能被解释为试图使用field@Aaron没问题。不是我的反对票btwnp,我也不会这么认为。s选项是很久以前jq没有
输入和
输入的遗迹。当目标是说明或鼓励最佳实践时,通常应尽可能避免使用它,除非强调它的低效性。@peak感谢您的反馈,我觉得使用slurp模式是为了更简单的代码,我不知道它的低效性。我想我必须习惯输入[s]
$ jq -n '.a = [inputs.a]' foo.txt
{
  "a": [
    "b",
    "e",
    "f"
  ]
}