如何在Groovy中统计JSON对象中materialNumber的总数?代码问题排查
问题:Groovy中JSONSlurper统计materialNumber总数结果始终为0的解决办法
核心错误分析
你的代码计数始终为0的根本原因是JSON路径访问错误:
- 你的JSON载荷里,物料数据是放在
materials数组下的,但代码里写的是jsonIN.materialNumber.each——这个路径不存在,jsonIN.materialNumber的值是null,所以循环根本没有执行,计数器自然保持0。 - 另外代码里的
materials.materialNumber != 'null'判断是冗余的,因为JSON里的materialNumber要么是有效字符串,要么是null(你的示例里都是有效字符串),不会出现字符串'null'的情况。
修正后的代码
import com.sap.gateway.ip.core.customdev.util.Message import groovy.json.JsonSlurper def Message countMATNR(Message message) { def reader = message.getBody(InputStream) def jsonIN = new JsonSlurper().parse(reader) // 遍历materials数组,过滤有效materialNumber并计数 def property_matnrCounter = jsonIN.materials.count { material -> material.materialNumber?.trim() // 自动处理null、空字符串、全空白字符串 } message.setProperty("numberOfMaterial", property_matnrCounter) return message; }
代码说明
- 修正路径:将
jsonIN.materialNumber.each改为jsonIN.materials,正确访问到物料数组。 - 简化计数逻辑:用Groovy的
count方法直接统计符合条件的元素数量,比手动循环计数更简洁高效。 - 优化空值判断:
material.materialNumber?.trim()会自动过滤以下无效情况:materialNumber为null时,?.操作符返回null,不计数materialNumber为空字符串或全空白字符串时,trim()后为空,不计数
内容的提问来源于stack exchange,提问作者Iri
相关产品推荐
相关产品推荐

