使用Groovy移除JSON中Description和Title为空的SEO数组
解决JSON中移除空SEO数组的Groovy实现问题
问题背景
需求:当JSON数组中对象的SEO数组内所有元素的Description和Title字段均为空时,移除该SEO字段。
原代码问题分析
你提供的代码存在几个关键问题:
- 遍历层级错误:外层遍历的是JSON数组元素,但内层针对单个SEO元素做判断,未覆盖整个SEO数组的校验
- 移除对象错误:试图从外层JSON数组移除
SEO字段,而非当前遍历的对象 - 条件判断逻辑混乱:
findResults的写法无法准确校验Description和Title是否均为空
正确实现代码
def Message processData(Message message) { def body = message.getBody(String); def json = new JsonSlurper().parseText(body) json.each { item -> // 先确认当前对象存在SEO字段 if (item.SEO) { // 校验SEO数组内所有元素的Description和Title是否全为空 boolean allSeoEntriesEmpty = item.SEO.every { seoEntry -> seoEntry.Description == "" && seoEntry.Title == "" } // 满足条件则移除当前对象的SEO字段 if (allSeoEntriesEmpty) { item.remove("SEO") } } } def out = JsonOutput.toJson(json) message.setBody(out) return message }
代码逻辑说明
- 遍历外层JSON数组中的每个对象
- 先判断对象是否存在
SEO字段,避免空指针异常 - 使用
every方法校验SEO数组内的所有元素:只有当所有元素的Description和Title都为空时,返回true - 若校验通过,从当前对象中移除
SEO字段 - 将处理后的JSON转换为字符串并设置回消息体
测试结果
针对你提供的示例JSON,运行代码后输出结果如下:
[ { "accesoires": [ "1167296" ], "shortCode": "S-576", "spareParts": [ "800236" ] } ]
内容的提问来源于stack exchange,提问作者Kumar Badam
相关产品推荐
相关产品推荐

