使用Groovy脚本移除JSON数组中指定字段双引号的问题求解
问题根因
你原来的脚本仅适配了单JSON对象结构的输入,当输入为JSON数组时,JsonSlurper解析后返回的是List集合,集合本身没有Amount字段,所以转换逻辑完全不触发。另外原脚本还存在2处语法问题:一是没有实例化JsonSlurper就直接调用方法,二是把convertToFloat方法定义在了processData方法内部,不符合Groovy语法规范。
修正后完整脚本
import com.sap.gateway.ip.core.customdev.util.Message import groovy.json.JsonBuilder import groovy.json.JsonSlurper def Message processData(Message message) { def body = message.getBody(java.lang.String) as String def jsonSlurper = new JsonSlurper() def jsonData = jsonSlurper.parseText(body) // 兼容数组和单对象两种结构 if (jsonData instanceof List) { jsonData.each { item -> if (item.Amount != null) { item.Amount = convertToFloat(item.Amount) } } } else if (jsonData instanceof Map) { if (jsonData.Amount != null) { jsonData.Amount = convertToFloat(jsonData.Amount) } } message.setBody(new JsonBuilder(jsonData).toPrettyString()) return message } static Object convertToFloat(Object inputValue) { if (inputValue.isNumber()) { return inputValue.toFloat() } return inputValue }
效果说明
修正后的脚本会自动判断输入JSON的结构:如果是数组就遍历每一个对象处理Amount字段,单对象则直接处理,最终输出的Amount字段会转为数值类型,不再带双引号,完全符合你给出的预期输出格式。
内容的提问来源于stack exchange,提问作者janardhan d
相关产品推荐
相关产品推荐

