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

Groovy使用JsonSlurper解析JSON时获取数组名及无过滤声明列表方法

问题1:获取JSON中的数组名称(Array1、Array2)

JsonSlurper 解析JSON后,外层对象会被转为Groovy的Map结构,你可以通过遍历Order节点的键,筛选值类型为List的键即可拿到所有数组名称:

def input = new JsonSlurper().parse(reader)
// 筛选Order下所有值为数组的键
def arrayNames = input.Order.keySet().findAll { key ->
    input.Order[key] instanceof List
}
// 输出结果:[Array1, Array2]

问题2:不带过滤条件声明列表

JsonSlurper 解析JSON数组后会直接生成Groovy的List对象,不需要调用findAll,直接引用对应节点即可:

// 直接获取Array1的全部元素,无需过滤
def fullArray1 = input.Order.Array1

完整实现代码(匹配你期望的输出)

注意你原有代码里的判断Valid == "true"存在问题:JSON里的Valid是布尔类型,不是字符串,不需要加引号。以下是完整的过滤并输出目标JSON的代码:

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def input = new JsonSlurper().parse(reader)
def result = [
    Order: [
        Header: input.Order.Header, // 保留原有Header
        // 遍历所有数组键,过滤每个数组中Valid为true的元素
        *: input.Order.keySet()
            .findAll { input.Order[it] instanceof List }
            .collectEntries { arrName ->
                [arrName, input.Order[arrName].findAll { it.Valid }]
            }
    ]
]

// 格式化输出JSON
println JsonOutput.prettyPrint(JsonOutput.toJson(result))

运行上述代码就会直接输出你提供的期望结果。

内容的提问来源于stack exchange,提问作者Eric C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:48:00