如何将 groovy 映射转换为 json

ari*_*lma 5 groovy jenkins-groovy jenkins-pipeline

我在 Jenkins 管道中有以下代码:

stage ("distribution"){
            steps{
                script{
                    def rules = [
                            service_name: "core", 
                            site_name: "*", 
                            city_name: "*", 
                            country_codes: ["*"]
                ]
                    amd_distribution_distribute_bundle distribution_rules: rules
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

如您所见,它是一个地图参数。如何使用 Groovy 代码将其转换为 JSON 文件?最后它应该是这样的:

{
  "distribution_rules": [
    {
      "service_name": "core*",
      "site_name": "*",
      "city_name": "*",
      "country_codes": ["*"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令,但没有帮助:

import groovy.json.JsonBuilder
import groovy.json.JsonOutput

def call(Map parameters)
{
    def DISTRIBUTION_RULES = parameters.distribution_rules
    def json = new groovy.json.JsonBuilder()
    json rootKey: "${DISTRIBUTION_RULES}"
    writeFile file: 'rootKey', text: JsonOutput.toJson(json)
}
Run Code Online (Sandbox Code Playgroud)

Szy*_*iak 6

无需在您的文件中混合JsonBuilder和。该方法采用正则并将其转换为等效的 JSON 对象。默认情况下,它会创建一个扁平的单行文件。如果您希望获得所谓的漂亮打印,则需要使用.JsonOutputamd_distribution_distribute_bundle.groovyJsonOutput.toJson(map)MapJsonOutput.prettyPrint(JsonOutput.toJson(map))

平面印刷

import groovy.json.JsonOutput

def call(Map parameters) {
    def DISTRIBUTION_RULES = parameters.distribution_rules

    writeFile file: 'rootKey', text: JsonOutput.toJson([distribution_rules: [DISTRIBUTION_RULES]])
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ cat rootKey
{"distribution_rules":[{"service_name":"core","site_name":"*","city_name":"*","country_codes":["*"]}]}%    
Run Code Online (Sandbox Code Playgroud)

漂亮的印花

$ cat rootKey
{"distribution_rules":[{"service_name":"core","site_name":"*","city_name":"*","country_codes":["*"]}]}%    
Run Code Online (Sandbox Code Playgroud)

输出:

$ cat rootKey
{
    "distribution_rules": [
        {
            "service_name": "core",
            "site_name": "*",
            "city_name": "*",
            "country_codes": [
                "*"
            ]
        }
    ]
}%     
Run Code Online (Sandbox Code Playgroud)