You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按imagePushedAt及含master的imageTags过滤JSON数组?

镜像数据集筛选问题解决方法

问题背景

我有如下JSON格式的镜像详情数据集:

{"imageDetails": [{"registryId": "259611133533","repositoryName": "core","imageDigest": "sha256:b17e3f35ff2e0b9af437372d7777e1cc092994eb87dbddf2d73d467eb122cf51","imageTags": ["master-202404300732"],"imageSizeInBytes": 470904068,"imagePushedAt": "2024-04-30T09:34:19+02:00","imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json","artifactMediaType": "application/vnd.docker.container.image.v1+json"},{"registryId": "259611133533","repositoryName": "core","imageDigest": "sha256:dfe2a1df2d6d8b39bdd37887979f027de29f802295e1b7536c31ac786fc0bbea","imageTags": ["develop-202404230503"],"imageSizeInBytes": 471216957,"imagePushedAt": "2024-04-23T07:07:14+02:00","imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json","artifactMediaType": "application/vnd.docker.container.image.v1+json","lastRecordedPullTime": "2024-04-24T08:55:56.071000+02:00"},{"registryId": "259611133533","repositoryName": "core","imageDigest": "sha256:39239ba86a543aa6787da0a02479d6f59eb00742e4810a9d4b52f1423a5e0392","imageTags": ["master-202404260911"],"imageSizeInBytes": 470843809,"imagePushedAt": "2024-04-26T11:12:51+02:00","imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json","artifactMediaType": "application/vnd.docker.container.image.v1+json","lastRecordedPullTime": "2024-04-26T11:14:06.695000+02:00"}]}

需求是筛选出同时满足以下两个条件的完整元素:

  • imagePushedAt < '2024-04-27'
  • imageTags数组中包含带有master字符串的标签

之前尝试的问题

  1. 第一个查询imageDetails[?imagePushedAt&lt;2024-04-27&amp;&amp; imageTags.contains(@,master)]无法生效,因为JMESPath中contains仅用于检查字符串是否含子串,不能直接作用于数组判断元素匹配。
  2. 第二个查询imageDetails[?imagePushedAt < 2024-04-27] | [].imageTags[?contains(@,master)]只会提取匹配的标签,不匹配的返回空数组,无法过滤掉整个不符合的元素。

正确筛选方法

使用JMESPath的any函数结合contains,判断数组中是否存在满足条件的元素,正确查询语句如下:

imageDetails[?imagePushedAt < `2024-04-27` && any(imageTags, contains(@, `master`))]

语法解释

  • any(imageTags, contains(@, master)):遍历imageTags数组,只要有一个元素包含master子串,就返回true
  • 结合时间条件,即可筛选出同时满足两个要求的完整元素

查询结果

执行后会返回符合条件的元素:

[
  {
    "registryId": "259611133533",
    "repositoryName": "core",
    "imageDigest": "sha256:39239ba86a543aa6787da0a02479d6f59eb00742e4810a9d4b52f1423a5e0392",
    "imageTags": ["master-202404260911"],
    "imageSizeInBytes": 470843809,
    "imagePushedAt": "2024-04-26T11:12:51+02:00",
    "imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "artifactMediaType": "application/vnd.docker.container.image.v1+json",
    "lastRecordedPullTime": "2024-04-26T11:14:06.695000+02:00"
  }
]

内容的提问来源于stack exchange,提问作者Tiziano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:06:20