如何用Groovy基于Excel数据从JSON中筛选指定节点?
用Groovy实现JSON按作者过滤的方案
当然可以用Groovy实现这个需求!Groovy对JSON和集合的处理天生就很简洁,比直接用HashMap硬写要顺手得多。下面是完整的实现方案,包含JSON解析、按作者过滤,以及模拟从Excel读取作者值的逻辑:
核心实现代码
@Grab('org.codehaus.groovy:groovy-json:3.0.17') import groovy.json.JsonSlurper import groovy.json.JsonBuilder // 原始JSON字符串 def originalJson = '''{ "book": [ { "id": "01", "language": "Java", "edition": "third", "author": "Herbert Schildt" }, { "id": "07", "language": "C++", "edition": "second", "author": "E.Balagurusamy" } ] }''' // 模拟从Excel获取的目标作者(实际项目中替换为Excel读取逻辑) def targetAuthor = "Herbert Schildt" // 1. 解析原始JSON def jsonSlurper = new JsonSlurper() def parsedData = jsonSlurper.parseText(originalJson) // 2. 过滤book数组,仅保留匹配作者的节点 def filteredBooks = parsedData.book.findAll { it.author == targetAuthor } // 3. 构建处理后的JSON结构 def result = [book: filteredBooks] // 4. 输出格式化后的结果 def jsonBuilder = new JsonBuilder(result) println jsonBuilder.toPrettyString()
运行这段代码,当传入Herbert Schildt时,输出会是:
{ "book": [ { "id": "01", "language": "Java", "edition": "third", "author": "Herbert Schildt" } ] }
从Excel读取作者值的补充代码
如果需要真正从Excel中读取作者值,可以借助Apache POI库实现,下面是示例片段:
@Grab('org.apache.poi:poi:5.2.5') @Grab('org.apache.poi:poi-ooxml:5.2.5') import org.apache.poi.xssf.usermodel.XSSFWorkbook import java.io.FileInputStream // 读取Excel文件(假设作者名在第一个工作表的A1单元格) def excelFile = new FileInputStream("your_excel_file.xlsx") def workbook = new XSSFWorkbook(excelFile) def sheet = workbook.getSheetAt(0) def targetAuthor = sheet.getRow(0).getCell(0).getStringCellValue() // 关闭资源 workbook.close() excelFile.close()
把这段代码替换掉之前的targetAuthor模拟赋值部分,就能实现从Excel动态获取作者名进行过滤了。
至于你之前尝试HashMap没成功,大概率是因为手动处理嵌套的HashMap结构比较繁琐,而Groovy的findAll方法可以直接对集合进行过滤,配合JsonSlurper的解析能力,整个流程会简洁很多。
内容的提问来源于stack exchange,提问作者avidCoder
相关产品推荐
相关产品推荐

