如何用Groovy动态替换JSON中的数字变量?已遇转换问题
解决Groovy替换JSON中数字类型字段的问题
我来帮你搞定这个问题!直接用字符串替换处理数字类型的字段确实容易踩坑,因为你不仅要替换数值,还得处理引号的问题(毕竟原JSON里portNo是字符串空值,最终要变成不带引号的数字)。推荐用Groovy原生的JSON处理工具来操作,既稳妥又能保证格式正确,下面给你两种可行方案:
方法一:使用JsonSlurper+JsonBuilder(推荐,健壮性高)
这种方式是把JSON解析成Groovy的Map对象,直接修改对应字段的值,再重新生成JSON,能自动处理类型转换:
import groovy.json.JsonSlurper import groovy.json.JsonBuilder // 你的原始JSON字符串 def originalJson = '{ "jobName":"", "protocolName":"tcp", "portNo":"" }' // 解析JSON为可操作的Map def jsonData = new JsonSlurper().parseText(originalJson) // 直接修改字段值:字符串类型赋值字符串,数字类型直接给整数 jsonData.jobName = "myjob" jsonData.portNo = 1112 // 这里直接传整数,生成JSON时会自动变成数字类型 // 生成最终的JSON字符串(toPrettyString()可以生成格式化的JSON,也可以用toString()生成紧凑格式) def finalJson = new JsonBuilder(jsonData).toPrettyString() println(finalJson)
运行后输出的JSON就是你想要的:
{ "jobName": "myjob", "protocolName": "tcp", "portNo": 1112 }
这种方法的好处是不管JSON格式有什么细微变化(比如字段间的空格、换行),都能正确解析和修改,不会因为字符串匹配失败出问题。
方法二:字符串替换(适合简单固定格式场景)
如果你只是临时处理固定格式的JSON,也可以用字符串替换,但要注意连引号一起替换,而不是只替换引号内的内容:
def originalJson = '{ "jobName":"", "protocolName":"tcp", "portNo":"" }' // 替换jobName(和你之前的操作一样),同时替换portNo的引号和空值 def finalJson = originalJson .replace('"jobName":""', '"jobName":"myjob"') .replace('"portNo":""', '"portNo":1112') println(finalJson)
这种方式的局限性是如果原始JSON的格式有变化(比如portNo字段前后有多余空格,或者写成"portNo" : ""),替换就会失效,所以只适合简单场景。
内容的提问来源于stack exchange,提问作者Monish Das
相关产品推荐
相关产品推荐

