使用jq从多个文件创建合并的JSON数组

时间:2020-02-24 08:28:51

标签: json jq

我有多个具有以下格式的JSON文件one.jsontwo.jsonthree.json,我想使用jq从它们创建一个合并数组。因此,我想从所有文件中提取Name内的ValueParameters字段,并使用它们创建一个数组,在其中将根据{构造id值{1}}值和Name字段将使用value字段值构造。

输入:
one.json

Value

two.json

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

    }
  ]
}

three.json

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

    }
  ]
}

输出:

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

    }
  ]
}

如何使用[ { "id": "id1", "value": "one" }, { "id": "id2", "value": "xyz" }, { "id": "id3", "value": "xyz" } ]

1 个答案:

答案 0 :(得分:2)

您可以使用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对。