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.
相关产品推荐
相关产品推荐

