合并多个 JSON 文件,通过字段删除重复对象

合并多个 JSON 文件,通过字段删除重复对象

我正在尝试合并数十万个具有单个对象的 JSON 文件。在此帮助下回答我已成功将所有对象作为数组添加到单个对象中。现在,如果特定字段或参数重复,我想在合并期间过滤掉一些对象。类似field 1两个对象具有相同的值。

以下是示例

输入文件1:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

输入文件2:

[
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

输入文件3:

[
    {
      "field 1": 10,
      "field 2": 20,
      "field 3": 30,
      "field 4": 40
    }
]

预期输出:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    },
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]

由于field 1值相同,文件 3 对象不会合并

答案1

您只需使用该unique_by()函数,jq其中需要一个对象数组并将字段名称作为输入来删除重复项

jq -n '[ inputs[] ] | unique_by(."value 1")'

附加在我的其他之上回答要根据一个字段进行唯一选择并通过另一字段删除对象,您可以执行以下操作。以下代码对排除重复项的对象进行分组,"value 1"并排除包含以下内容的对象:"value 6"

jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )]  '

相关内容