使用jq删除JSON值中的重复项

Dan*_*iel 5 json jq

我有以下JSON:

[
  {
    "function": "ping",
    "name": "start",
    "servers": [
      {
        "load": 581.6875,
        "last_heard": 2.379324197769165,
        "version": "1.0",
        "hidden": false,
        "pid": "19735"
      },
      {
        "load": 444.0625,
        "last_heard": 1.3227169513702393,
        "version": "1.0",
        "hidden": false,
        "pid": "12092"
      }
    ]
  },
  {
    "function": "pong",
    "name": "middle",
    "servers": [
      {
        "load": 581.6875,
        "last_heard": 2.379324197769165,
        "version": "2.0",
        "hidden": false,
        "pid": "19735"
      },
      {
        "load": 444.0625,
        "last_heard": 1.3227169513702393,
        "version": "3.0",
        "hidden": false,
        "pid": "12092"
      },
      {
        "load": 444.0625,
        "last_heard": 1.3227169513702393,
        "version": "3.0",
        "hidden": false,
        "pid": "12093"
      }
    ]
  },
  {
    "function": "pang",
    "name": "end",
    "servers": [
      {
        "load": 581.6875,
        "last_heard": 2.379324197769165,
        "version": "2.0",
        "hidden": false,
        "pid": "19735"
      },
      {
        "load": 444.0625,
        "last_heard": 1.3227169513702393,
        "version": "2.0",
        "hidden": false,
        "pid": "12092"
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

(这只是一个样本,它有数百个条目)

我需要的是获得

[{"name": "start", "version": ["1.0"]},
{"name": "middle", "version": ["2.0", "3.0"]},
{"name": "end", "version": ["2.0"]}]
Run Code Online (Sandbox Code Playgroud)

所以我需要删除无用的数据,然后获取一个名称列表,其中包含"version"的唯一值.

我可以到达我所拥有的地步

{
  "name": "ping",
  "version": [
    "1.0",
    "1.0"
  ]
}
{
  "name": "pong",
  "version": [
    "2.0",
    "3.0",
    "3.0"
  ]
}
{
  "name": "pang",
  "version": [
    "2.0",
    "2.0"
  ]
}
Run Code Online (Sandbox Code Playgroud)

运用

jq '.[] | {name: .function, version: [.servers[].version]}'
Run Code Online (Sandbox Code Playgroud)

但我需要摆脱重复的价值观.这有可能使用jq吗?

hek*_*mgl 9

你快到了.只需将version数组传递给unique函数:

jq '[.[]|{name, "version": [.servers[].version]|unique}]' input
Run Code Online (Sandbox Code Playgroud)