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

Dev*_*eam 3 json jq

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

这是例子

输入文件1:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]
Run Code Online (Sandbox Code Playgroud)

输入文件2:

[
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]
Run Code Online (Sandbox Code Playgroud)

输入文件3:

[
    {
      "field 1": 10,
      "field 2": 20,
      "field 3": 30,
      "field 4": 40
    }
]
Run Code Online (Sandbox Code Playgroud)

预期输出:

[
    {
      "field 1": 10,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    },
    {
      "field 1": 15,
      "field 2": 25,
      "field 3": 35,
      "field 4": 45
    }
]
Run Code Online (Sandbox Code Playgroud)

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

Ini*_*ian 5

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

jq -n '[ inputs[] ] | unique_by(."value 1")'
Run Code Online (Sandbox Code Playgroud)

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

jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )]  '
Run Code Online (Sandbox Code Playgroud)