【问题标题】:Sort / filter multiple objects in JQ by date按日期对 JQ 中的多个对象进行排序/过滤
【发布时间】:2018-07-06 16:24:02
【问题描述】:

我正在尝试使用 JQ 在 Nexus API 查询中查找最新的工件。现在,我的 JSON 输出如下所示:

{
  "items" : [ {
    "downloadUrl" : "https://nexus.ama.org/repository/Snapshots/org/sso/browser-manager/1.0-SNAPSHOT/browser-manager-1.0-20180703.144121-1.jar",
    "path" : "org/sso/browser-manager/1.0-SNAPSHOT/browser-manager-1.0-20180703.144121-1.jar",
    "id" : "V0FEQS1TbmFwc2hvdHM6MzhjZDQ3NTQwMTBkNGJhOTY1N2JiOTEyMTM1ZGRjZWQ",
    "repository" : "Snapshots",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "7ac324905fb1ff15ef6020f256fcb5c9f54113ca",
      "md5" : "bb25c483a183001dfdc58c07a71a98ed"
    }
  }, {
    "downloadUrl" : "https://nexus.ama.org/repository/Snapshots/org/sso/browser-manager/1.0-SNAPSHOT/browser-manager-1.0-20180703.204941-2.jar",
    "path" : "org/sso/browser-manager/1.0-SNAPSHOT/browser-manager-1.0-20180703.204941-2.jar",
    "id" : "V0FEQS1TbmFwc2hvdHM6MzhjZDQ3NTQwMTBkNGJhOWM4YjQ0NmRjYzFkODkxM2U",
    "repository" : "Snapshots",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "b4ba2049ea828391c720f49b6668a66a8b0bca9c",
      "md5" : "6757c55c0e6d933dc90e398204cca966"
    }
  } ],
  "continuationToken" : null
}

我已经设法使用 JQ 将数据重新打包为:

.items[] | { "id" : .id,  "date" : (.path |  scan("[0-9]{8}\\.[0-9-]*")) } 

输出:

{
  "id": "V0FEQS1TbmFwc2hvdHM6MzhjZDQ3NTQwMTBkNGJhOTY1N2JiOTEyMTM1ZGRjZWQ",
  "date": "20180703.144121-1"
}
{
  "id": "V0FEQS1TbmFwc2hvdHM6MzhjZDQ3NTQwMTBkNGJhOWM4YjQ0NmRjYzFkODkxM2U",
  "date": "20180703.204941-2"
}

现在我有点难以确定两个 JSON 对象中的哪一个是最新的。如何按日期排序并提取该对象的 id?

有没有更好的方法来过滤/排序这些数据?我的示例在 JSON 响应中只有 2 个 items[],但它们的数量可能更多。

【问题讨论】:

    标签: json sorting datetime jq


    【解决方案1】:

    过滤器sort_by/1 将按时间顺序对您的时间戳进行排序,但它需要一个数组作为输入,因此您可以编写:

    .items 
    | map({ "id" : .id,  "date" : (.path |  scan("[0-9]{8}\\.[0-9-]*")) })
    | sort_by(.date)
    | .[-1]
    

    尾随 .[-1] 选择最后一项,因此您的输入结果将是:

    {
      "id": "V0FEQS1TbmFwc2hvdHM6MzhjZDQ3NTQwMTBkNGJhOWM4YjQ0NmRjYzFkODkxM2U",
      "date": "20180703.204941-2"
    }
    

    【讨论】:

    • 太棒了。谢谢。我一直在努力弄清楚如何使用 map() 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2016-11-05
    • 2012-04-12
    • 2011-11-22
    相关资源
    最近更新 更多