任何人都可以帮助我使用
bash
和 jq
来过滤此 JSON,直到每个项目仅第一次出现 user.login
,并使用最高的 submitted_at
键。端点正在向我返回历史信息,我只想要响应的最新详细信息。以这个 JSON 为例
[
{
"user": {
"login": "user1",
},
"state": "CHANGE_REQUESTED",
"submitted_at": "2024-01-23T19:18:31Z",
},
{
"user": {
"login": "user1",
},
"state": "DISMISSED",
"submitted_at": "2024-02-05T16:49:58Z",
},
{
"user": {
"login": "user1",
},
"state": "APPROVED"
"submitted_at": "2024-02-06T19:18:31Z",
},
{
"user": {
"login": "user2",
},
"state": "APPROVED"
"submitted_at": "2024-01-23T19:18:31Z",
},
{
"user": {
"login": "user2",
},
"state": "DISMISSED"
"submitted_at": "2024-01-21T19:18:31Z",
}
]
结果应该是以下 JSON,其中仅包含
user.login
的最新副本,然后我可以循环遍历
[
{
"user": {
"login": "user1",
},
"state": "APPROVED"
"submitted_at": "2024-02-06T19:18:31Z",
},
{
"user": {
"login": "user2",
},
"state": "APPROVED"
"submitted_at": "2024-01-23T19:18:31Z",
}
]
之后我可以在 bash 中循环以从对象中收集我需要的信息。
这可能已经在某个地方得到了回答,但我想我正在努力在搜索引擎中提出问题,以便能够获得所需的结果。
为了得到我期望的 JSON,我使用了以下 jq 语句。
jq '. |= sort_by(.submitted_at) | reverse | unique_by(.user.login)' "$tmp_response_file_pr_reviews_request"
这会按照
submitted_at
的尊重对结果数组进行排序,以便最高日期位于顶部,然后使用 unique_by
过滤到数组中每个 `user.login 键值对的第一个实例,得到了我需要的东西。