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

Groovy中如何定义指定JSON结构的字符串?

在Groovy中创建指定JSON字符串的正确方式

嘿,这个问题我太熟悉了!手动拼接带转义的JSON字符串很容易因为Groovy的字符串特性踩坑,尤其是嵌套结构的时候。给你三种靠谱的解决方案,从简单到优雅任你选:

1. 直接用单引号包裹纯JSON字符串(最简单)

Groovy里的单引号字符串是纯字面量字符串,不会做插值处理,所以内部的双引号完全不需要转义,直接把你的JSON内容放进去就行:

def jsonStr = '{"Changes": [{"Action": "UPSERT", "ResourceRecordSet": { "Name": "rms-collector-demo.cnqr.delivery.","Type": "CNAME","TTL": 300,"ResourceRecords": [{ "Value": "d-4kushcom5y13.execute-api.us-west-2.amazonaws.com"}]}}]}'

2. 双引号字符串的正确转义写法(如果你一定要用双引号)

如果因为某些原因必须用双引号包裹字符串,那你需要把每个内部的双引号用反斜杠\转义——注意Groovy的双引号字符串会做变量插值,所以转义是必须的:

def jsonStr = "{\"Changes\": [{\"Action\": \"UPSERT\", \"ResourceRecordSet\": { \"Name\": \"rms-collector-demo.cnqr.delivery.\",\"Type\": \"CNAME\",\"TTL\": 300,\"ResourceRecords\": [{ \"Value\": \"d-4kushcom5y13.execute-api.us-west-2.amazonaws.com\"}]}}]}"

你之前可能是漏了某个转义,或者没注意双引号字符串的插值特性导致转义失效,不过这种方式可读性差,不推荐。

3. 用Groovy原生JSON工具构建(最优雅,推荐)

Groovy自带了非常方便的JSON构建工具,完全不用管转义,代码结构清晰还容易维护,有两种常用方式:

方式A:使用JsonBuilder

import groovy.json.JsonBuilder

def jsonBuilder = new JsonBuilder()
jsonBuilder {
    Changes([
        {
            Action "UPSERT"
            ResourceRecordSet {
                Name "rms-collector-demo.cnqr.delivery."
                Type "CNAME"
                TTL 300
                ResourceRecords([
                    { Value "d-4kushcom5y13.execute-api.us-west-2.amazonaws.com" }
                ])
            }
        }
    ])
}

// 得到紧凑格式的JSON字符串
def compactJson = jsonBuilder.toString()
// 得到格式化后的易读JSON
def prettyJson = jsonBuilder.toPrettyString()

方式B:先构造Map/List,再用JsonOutput转JSON

import groovy.json.JsonOutput

def jsonData = [
    Changes: [
        [
            Action: "UPSERT",
            ResourceRecordSet: [
                Name: "rms-collector-demo.cnqr.delivery.",
                Type: "CNAME",
                TTL: 300,
                ResourceRecords: [
                    [Value: "d-4kushcom5y13.execute-api.us-west-2.amazonaws.com"]
                ]
            ]
        ]
    ]
]

// 生成紧凑JSON
def compactJson = JsonOutput.toJson(jsonData)
// 生成格式化JSON
def prettyJson = JsonOutput.prettyPrint(compactJson)

这两种方式完全规避了手动转义的麻烦,而且结构和JSON一一对应,修改起来特别方便,是Groovy处理JSON的最佳实践。

内容的提问来源于stack exchange,提问作者Kush Arora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:40:53