Groovy脚本实现JSON指定字符串转整数的问题求助
问题描述
我有一个嵌套结构的JSON数据,需要将其中E1EDT13数组内各对象的NTANF、ISDD字段的字符串值转换为整数(去除双引号)。
输入JSON
{"DELVRY07": {"IDOC": {"@BEGIN": "1","EDI_DC40": {"@SEGMENT": "1"},"E1EDL20": {"@SEGMENT": "1","E1EDL21": {"@SEGMENT": "1"},"E1ADRM1": [{"@SEGMENT": "1"}],"E1EDT13": [{"@SEGMENT": "1","QUALF": "006","NTANF": "20230711","ISDD": "20230711"},{"@SEGMENT": "1","QUALF": "003","NTANF": "20230711"}]}}}
期望输出JSON
{"DELVRY07": {"IDOC": {"@BEGIN": "1","EDI_DC40": {"@SEGMENT": "1"},"E1EDL20": {"@SEGMENT": "1","E1EDL21": {"@SEGMENT": "1"},"E1ADRM1": [{"@SEGMENT": "1"}],"E1EDT13": [{"@SEGMENT": "1","QUALF": "006","NTANF": 20230711,"ISDD": 20230711},{"@SEGMENT": "1","QUALF": "003","NTANF": 20230711}]}}}
当前失效的Groovy脚本
def jsonSlurper = new JsonSlurper() def list = jsonSlurper.parseText(body) list['NTANF'] = Integer.parseInt(list['NTANF']) list['ISDD'] = Integer.parseInt(list['ISDD']) def jsonOP = JsonOutput.toJson(list)
问题原因
当前脚本直接操作顶层对象的NTANF和ISDD字段,但这两个字段实际嵌套在DELVRY07.IDOC.E1EDL20.E1EDT13数组的子对象里,顶层根本不存在这两个字段,所以脚本没有任何效果。
解决方案
需要先定位到嵌套的E1EDT13数组,遍历数组中的每个对象,对存在的目标字段进行类型转换(注意处理字段缺失的情况,避免空指针异常)。
修正后的Groovy脚本
import groovy.json.JsonSlurper import groovy.json.JsonOutput def jsonSlurper = new JsonSlurper() def data = jsonSlurper.parseText(body) // 定位到E1EDT13数组 def e1edt13List = data.DELVRY07.IDOC.E1EDL20.E1EDT13 // 遍历数组中的每个对象 e1edt13List.each { item -> // 转换NTANF字段(如果存在) if (item.NTANF) { item.NTANF = item.NTANF.toInteger() } // 转换ISDD字段(如果存在) if (item.ISDD) { item.ISDD = item.ISDD.toInteger() } } def jsonOP = JsonOutput.toJson(data) // 如需格式化输出,可替换为:def jsonOP = JsonOutput.prettyPrint(JsonOutput.toJson(data))
脚本说明
- 路径定位:通过
data.DELVRY07.IDOC.E1EDL20.E1EDT13准确获取到目标数组 - 遍历处理:使用
each遍历数组中的每个对象 - 安全转换:先判断字段是否存在,再调用Groovy内置的
toInteger()方法完成类型转换,比Integer.parseInt()更简洁 - 输出控制:转换完成后用
JsonOutput.toJson()生成最终JSON字符串,如需可读性更强的格式化输出,可使用JsonOutput.prettyPrint()
内容的提问来源于stack exchange,提问作者sabyasachi
相关产品推荐
相关产品推荐

