You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:25:58