Groovy中如何转义底层JSON?保留一级键并转义对象值为字符串
Groovy实现:保留JSON一级键,仅将对象值转为转义字符串
Got it,这个需求在Groovy里实现起来很直观,核心思路就是遍历JSON的一级键值对,判断值的类型——如果是嵌套的JSON对象(在Groovy里会被解析成Map),就把它转成带转义的JSON字符串;非对象类型的值直接保留。
完整实现代码
import groovy.json.JsonBuilder import groovy.json.JsonSlurper def processNestedJson(String inputJson) { // 解析输入JSON为Groovy可操作的Map结构 def jsonSlurper = new JsonSlurper() def originalData = jsonSlurper.parseText(inputJson) def processedData = [:] originalData.each { key, value -> if (value instanceof Map) { // 将嵌套对象转为JSON字符串,自动处理双引号转义 def subJsonBuilder = new JsonBuilder(value) processedData[key] = subJsonBuilder.toString() } else { // 非对象类型直接保留原值 processedData[key] = value } } // 将处理后的Map转回标准JSON字符串 def resultBuilder = new JsonBuilder(processedData) return resultBuilder.toString() } // 测试示例 def inputJson = '{ "a": "1", "b": { "c": "2", "d": { "e": "3" } }, "f": "4" }' def outputJson = processNestedJson(inputJson) println(outputJson)
代码解释
- 解析与遍历:用
JsonSlurper把输入的JSON字符串解析成Groovy的Map,这样就能方便地遍历每一个一级键值对。 - 类型判断与转换:检查每个值是否是
Map(对应原JSON里的嵌套对象),如果是,用JsonBuilder把这个Map重新序列化为JSON字符串——JsonBuilder会自动处理双引号的转义,完美符合需求。 - 结果生成:把处理后的
Map再转回JSON字符串,得到最终的输出。
测试输出
运行上面的代码,会输出你期望的结果:
{ "a": "1", "b": "{ "c": "2", "d": { "e": "3"} }", "f": "4" }
内容的提问来源于stack exchange,提问作者horia
相关产品推荐
相关产品推荐

