【问题标题】:jq: join array elements from different files into one arrayjq:将来自不同文件的数组元素连接到一个数组中
【发布时间】:2018-01-03 17:06:19
【问题描述】:

我有一系列这样的 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 。文件1 文件2

但结果是:

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

任何想法都值得赞赏。

【问题讨论】:

  • 只有2个输入文件吗?

标签: arrays jq


【解决方案1】:

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

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

jq add file1 file2 ...

附言今后,请遵循http://stackoverflow.com/help/mcve 最小完整可验证示例中的指南

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我能够解决这个问题:

      jq -s 'flatten' file1 file2 ...

      所以 -s (slurp) 组装了一个文件内容数组(数组),flatten 删除了额外的 [] 级别,输出是所有文件中所有记录的数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多