jq:将来自不同文件的数组元素连接成一个数组

时间:2018-01-03 17:06:20

标签: arrays jq

我有一系列这样的JSON文件:

[
  {
    "bent_general": "0",
    "bext_general": "0",
    "date_yyyymmdd": "20171104",
    "end_time": "2017-11-07T02:58:56",
    "householdid": "EAM2231"
  },
  {
    "bent_general": "2",
    "bext_general": "8",
    "date_yyyymmdd": "20171126",
    "end_time": "2017-12-07T05:58:56",
    "householdid": "EAM1234",
  }
]

我需要将它们组合在一个具有相同结构的大文件中:

[
  {
    "data_from": "first_file"
  },
  {
    "data_from": "second_file"
  }
]

我试过了: jq -s。 file1 file2

但结果是:

[
  [
    {
      "data_from": "first_file"
    }
  ]
  ,
  [
    {
      "data_from": "second_file"
    }
  ]
]

任何想法都表示赞赏。

3 个答案:

答案 0 :(得分:1)

从问题中预期的输出应该是什么并不完全清楚,但看起来你想要连接数组。

如果是这种情况,并且您的文件列表是file1 file2 ...那么以下调用将是合适的:

jq add file1 file2 ...

P.S。将来,请遵循http://stackoverflow.com/help/mcve最小完整可验证示例

中的指南

答案 1 :(得分:0)

我遇到了同样的问题,并在github上找到了解决方案:https://github.com/stedolan/jq/issues/805#issuecomment-109783967

  

使用-s选项将返回一个包含输入JSON文件内容的数组,在您的情况下,它们也是数组。这意味着您需要扩展(…[])两个数组级别,并收集(​​[…])结果。

jq -s '[.[][]]' a-*.json > manifest.json

答案 2 :(得分:0)

我能够通过以下方式解决此问题:

jq -s 'flatten' file1 file2 ...

因此-s(slurp)组装一个文件内容数组(数组),flatten删除多余的[]级别,并且输出是所有文件中所有记录的数组。