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

如何在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;
}

代码说明

  1. 修正路径:将jsonIN.materialNumber.each改为jsonIN.materials,正确访问到物料数组。
  2. 简化计数逻辑:用Groovy的count方法直接统计符合条件的元素数量,比手动循环计数更简洁高效。
  3. 优化空值判断:material.materialNumber?.trim()会自动过滤以下无效情况:
    • materialNumber为null时,?.操作符返回null,不计数
    • materialNumber为空字符串或全空白字符串时,trim()后为空,不计数

内容的提问来源于stack exchange,提问作者Iri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:31:01