使用 JQ 从文件中删除重复的 JSON 块

Yas*_*ane 2 bash shell json jq

我有一个包含数千个条目的 JSON 文件,我需要删除重复的块。

以下是该文件的示例:

{ "signatures": [
   {
     "signatureId": 0050,
     "mode": 0
   },
   {
     "signatureId": 0012,
     "mode": 0
   },
   {
     "signatureId": 0012,
     "mode": 1
   }
]}
Run Code Online (Sandbox Code Playgroud)

这是要实现的目标结果:

{ "signatures": [
   {
     "signatureId": 0050,
     "mode": 0
   },
   {
     "signatureId": 0012,
     "mode": 0
   }
]}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,“mode”值并不重要,真正重要的是“signatureId”不能重复,因此当我们删除整个块时,无论“mode”保留哪个,都不是问题。

我只能使用 Shell 和/或 JQ。

pmf*_*pmf 5

unique_by与要检查重复项的字段一起用作其参数。它总是需要第一个(这里是带有 的"mode": 0

jq '.signatures |= unique_by(.signatureId)'
Run Code Online (Sandbox Code Playgroud)
{
  "signatures": [
    {
      "signatureId": 12,
      "mode": 0
    },
    {
      "signatureId": 50,
      "mode": 0
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

演示