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)
问题分析
你的代码存在两个关键错误:
- 调用方式错误:
findAll方法需要对obj.builds这个数组对象调用,而非直接使用全局findAll - 匹配逻辑错误:你使用了精确相等判断
== "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
相关产品推荐
相关产品推荐

