【问题标题】:Create merged JSON array from multiple files using jq使用 jq 从多个文件创建合并的 JSON 数组
【发布时间】:2023-03-26 02:54:01
【问题描述】:

我有多个 JSON 文件 one.jsontwo.jsonthree.json,格式如下,我想使用 jq 从它们创建一个合并数组。因此,从所有文件中我想提取 Parameters 内的 NameValue 字段并使用它们创建一个数组,其中 id 值将从 Name 值和 value 字段构造将使用Value 字段值构造。

输入:
one.json

{
  "Parameters": [
    {
      "Name": "id1",
      "Value": "one",
      "Version": 2,
      "LastModifiedDate": 1581663187.36

    }
  ]
}

两个.json

{
  "Parameters": [
    {
      "Name": "id2",
      "Value": "xyz",
      "Version": 2,
      "LastModifiedDate": 1581663187.36

    }
  ]
}

三个.json

{
  "Parameters": [
    {
      "Name": "id3",
      "Value": "xyz",
      "Version": 2,
      "LastModifiedDate": 1581663187.36

    }
  ]
}

输出:

[
  {
    "id": "id1",
    "value": "one"
  },
  {
    "id": "id2",
    "value": "xyz"
  },
  {
    "id": "id3",
    "value": "xyz"
  }
]

如何使用jq实现这一目标

【问题讨论】:

标签: json jq


【解决方案1】:

您可以使用reduce 表达式而不是将整个文件放入内存中(-s);通过对输入文件内容的迭代操作,然后一次添加一个必填字段。

jq -n 'reduce inputs.Parameters[] as $d (.; . + [ { id: $d.Name, value: $d.Value } ])' one.json two.json three.json

-n 标志是为了确保我们在通过inputs 函数提供的输入文件内容上从头开始构建输出 JSON 数据。由于reduce 以迭代方式工作,因此对于输入中的每个对象,我们创建一个最终数组,根据需要创建 KV 对。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多