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

如何使用jq工具提取JSON中指定前缀的text字段值

问题描述

需要从以下示例JSON中提取text字段满足以下条件的值:

  • 以23.acmestable.0.开头
  • 非SNAPSHOT格式

尝试执行以下jq命令时出错:

jq -r'.[].content.data[]["content-item"]'|jq -r '.[]| select (.text |startswith("^23.acmestable.0."))'

预期结果:

23.acmestable.0.22
23.acmestable.0.23
23.acmestable.0.24
23.acmestable.0.25

使用硬编码值执行以下命令可返回结果:

'.[].content.data[]["content-item"]'|jq -r '.[]| select (.text=="23.acme.0.23")'

返回结果:

{
  "text": "23.acmestable.0.23"
}

示例JSON:

[
   {
      "content": {
         "data": [
             {
               "content-item": [
                  {
                     "resourceURI": "https://acme.example.com/service/local/repositories/public/content/com/acme/acme-files/23.acmestable.0.0-SNAPSHOT/"
                  },
                  {
                     "relativePath": "/com/acme/acme-files/23.acmestable.0.0-SNAPSHOT/"
                  },
                  {
                     "text": "23.acmestable.0.0-SNAPSHOT"
                  },
                  {
                     "leaf": "false"
                  },
                  {
                     "lastModified": "2022-10-06 11:54:58.0 UTC"
                  },
                  {
                     "sizeOnDisk": "-1"
                  }
               ]
            },
             {
               "content-item": [
                  {
                     "resourceURI": "https://acme.example.com/service/local/repositories/public/content/com/acme/acme-files/23.acmestable.0.24/"
                  },
                  {
                     "relativePath": "/com/acme/acme-files/23.acmestable.0.24/"
                  },
                  {
                     "text": "23.acmestable.0.24"
                  },
                  {
                     "leaf": "false"
                  },
                  {
                     "lastModified": "2022-10-07 03:17:23.0 UTC"
                  },
                  {
                     "sizeOnDisk": "-1"
                  }
               ]
            },
             {
               "content-item": [
                  {
                     "resourceURI": "https://acme.example.com/service/local/repositories/public/content/com/acme/acme-files/23.acmestable.0.25/"
                  },
                  {
                     "relativePath": "/com/acme/acme-files/23.acmestable.0.25/"
                  },
                  {
                     "text": "23.acmestable.0.25"
                  },
                  {
                     "leaf": "false"
                  },
                  {
                     "lastModified": "2022-10-07 03:17:23.0 UTC"
                  },
                  {
                     "sizeOnDisk": "-1"
                  }
               ]
            },
            {
               "content-item": [
                  {
                     "resourceURI": "https://acme.example.com/service/local/repositories/public/content/com/acme/acme-files/23.acmestable.0.22/"
                  },
                  {
                     "relativePath": "/com/acme/acme-files/23.acmestable.0.22/"
                  },
                  {
                     "text": "23.acmestable.0.22"
                  },
                  {
                     "leaf": "false"
                  },
                  {
                     "lastModified": "2022-10-07 03:17:23.0 UTC"
                  },
                  {
                     "sizeOnDisk": "-1"
                  }
               ]
            },
             {
               "content-item": [
                  {
                     "resourceURI": "https://acme.example.com/service/local/repositories/public/content/com/acme/acme-files/23.acmestable.0.23/"
                  },
                  {
                     "relativePath": "/com/acme/acme-files/23.acmestable.0.23/"
                  },
                  {
                     "text": "23.acmestable.0.23"
                  },
                  {
                     "leaf": "false"
                  },
                  {
                     "lastModified": "2022-10-07 03:17:23.0 UTC"
                  },
                  {
                     "sizeOnDisk": "-1"
                  }
               ]
            }
         ]
      }
   }
]
解决方案

错误分析

  1. startswith()函数不需要加正则锚点^,它本身就是匹配字符串开头,加^会导致匹配字面量包含^的字符串,自然无结果;
  2. 原命令未过滤带-SNAPSHOT的项;
  3. 分两次调用jq效率低,可合并为一次处理。

正确的jq命令

jq -r '.[].content.data[]."content-item"[] | select(.text) | .text | select(startswith("23.acmestable.0.") and (test("-SNAPSHOT$") | not))'

命令解释

  • .[].content.data[]."content-item"[]:逐层遍历JSON结构,定位所有content-item数组内的元素;
  • select(.text):筛选出包含text键的元素,排除resourceURI等无关项;
  • .text:提取text字段的具体值;
  • select(startswith("23.acmestable.0.") and (test("-SNAPSHOT$") | not)):最终筛选出符合前缀要求且非SNAPSHOT的值。

执行该命令后,将得到预期结果:

23.acmestable.0.24
23.acmestable.0.25
23.acmestable.0.22
23.acmestable.0.23

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:41:02