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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:23:26