jq 获取对象列表中给定键的所有唯一值

jq get all unique values for a given key in a list of objects

假设我有一个端点 returns 以下数组:

[
  {"name": "Joe", "age": 21},
  {"name": "Steve", "age": 27},
  {"name": "Michelle", "age": 32},
  {"name": "Joe", "age": 23},
]

我知道我可以使用以下命令(使用 httpie)获取所有名称:

http https://some-endpoint | jq '.[] | .name'

# output
Joe
Steve
Michelle
Joe

如何获得所有唯一的名称(因此没有重复的名称)?

假设输入有效 JSON,以下 jq 程序将生成一个包含不同名称的数组:

map(.name) | unique

如果输入有多余的逗号,如示例所示,您可能希望考虑使用预处理器,例如 any-jsonhjson.