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

Groovy JSON解析过滤求助:按模式筛选displayName并存入数组

Groovy JSON筛选问题求助

我是Groovy初学者,需要解析给定的JSON数据,筛选出displayName匹配Name2-develop-FullPackage*模式的条目并存入数组,但尝试的代码返回空数组,请求技术帮助。

给定JSON数据

String json = '''{
  "_class" : "hudson.model.FreeStyleProject",
  "builds" : [
    {
      "_class" : "hudson.model.FreeStyleBuild",
      "displayName" : "#1500",
      "number" : 1500
    },
    {
      "_class" : "hudson.model.FreeStyleBuild",
      "displayName" : "Name1-develop-(#1499)",
      "number" : 1499
    },
    {
      "_class" : "hudson.model.FreeStyleBuild",
      "displayName" : "Name2-develop-FullPackage-(#1498)",
      "number" : 1498
    },
    {
      "_class" : "hudson.model.FreeStyleBuild",
      "displayName" : "Name2-develop-FullPackage-(#1497)",
      "number" : 1497
    }
  ]
}'''

尝试的代码

def jsonSlurper = new JsonSlurper()
def obj = jsonSlurper.parseText(json)
def result = findAll{ obj.builds.displayName == "Name2-develop-FullPackage" }
println(result)

问题分析

你的代码存在两个关键错误:

  1. 调用方式错误:findAll方法需要对obj.builds这个数组对象调用,而非直接使用全局findAll
  2. 匹配逻辑错误:你使用了精确相等判断== "Name2-develop-FullPackage",但目标displayName实际是Name2-develop-FullPackage-(#1498)这类带后缀的字符串,需要用前缀匹配或正则匹配来实现*通配的效果。

正确实现代码

方式一:前缀匹配(简单直接)

使用startsWith方法匹配前缀,完全符合Name2-develop-FullPackage*的需求:

def jsonSlurper = new JsonSlurper()
def obj = jsonSlurper.parseText(json)
// 筛选displayName以指定字符串开头的条目
def result = obj.builds.findAll { build ->
    build.displayName.startsWith("Name2-develop-FullPackage")
}
println(result)

方式二:正则匹配(灵活适配复杂模式)

如果需要更复杂的匹配规则,可以用正则表达式:

def jsonSlurper = new JsonSlurper()
def obj = jsonSlurper.parseText(json)
// 定义正则模式,匹配以Name2-develop-FullPackage开头的任意字符串
def matchPattern = ~/Name2-develop-FullPackage.*/
def result = obj.builds.findAll { build ->
    build.displayName ==~ matchPattern
}
println(result)

运行以上任意代码,都会返回符合条件的两个build条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:53:33