如何将Groovy地图转换为JSON

5

我在 Jenkins 流水线中有以下代码:

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

您可以看到,这是一个地图参数。我该如何使用Groovy代码将其转换为JSON文件?最终应该如下所示:

{
  "distribution_rules": [
    {
      "service_name": "core*",
      "site_name": "*",
      "city_name": "*",
      "country_codes": ["*"]
    }
  ]
}

我尝试了下面的命令,但没有帮助:
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)
}

1
https://dev59.com/dlcP5IYBdhLWcg3wN3qP#44718808 - daggett
没有意识到我应该在附件中的Groovy文件中写什么。 - arielma
2
def json = JsonOutput.toJson([ distribution_rules: rules ] ),然后将 json 写入文件。 - daggett
这段代码是用于管道或Groovy的? - arielma
1个回答

10

在你的amd_distribution_distribute_bundle.groovy文件中,没有必要混合使用JsonBuilderJsonOutputJsonOutput.toJson(map)方法接受一个常规的Map,将其转换为JSON对象等效形式。默认情况下,它创建一个单行文件。如果你期望得到所谓的漂亮打印(pretty print),你需要使用JsonOutput.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]])
}

输出:

$ cat rootKey
{"distribution_rules":[{"service_name":"core","site_name":"*","city_name":"*","country_codes":["*"]}]}%    

美化打印

import groovy.json.JsonOutput

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

    writeFile file: 'rootKey', text: JsonOutput.prettyPrint(JsonOutput.toJson([distribution_rules: [DISTRIBUTION_RULES]]))
}

输出:

$ cat rootKey
{
    "distribution_rules": [
        {
            "service_name": "core",
            "site_name": "*",
            "city_name": "*",
            "country_codes": [
                "*"
            ]
        }
    ]
}%     

JsonOutput.toJson([ distribution_rules: rules ]):请将语法更正为此。 - arielma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接