在Groovy中修改Jenkinsfile字典格式适配Jinja需求
解决方法
Groovy语法前置说明
Groovy里[key: value]本身就是**字典(Map)**的标准字面量写法,而{key: value}默认是闭包(不是字典),直接写会触发语法错误。如果非要用大括号定义字典,必须加as Map做类型转换。
场景1:修改代码中的字典写法为大括号格式
如果只是想把代码里的[]换成{},可以这么写(注意必须加as Map):
Dict = { 1: { "key": "CI", "value": "yash" }, 2: { "key": "CI", "value": "ruben" } } as Map
不过更推荐保留Groovy原生的[key: value]写法,避免和闭包语法混淆。
场景2:生成大括号包裹的JSON输出
如果你是想把结构转换成JSON对象(而非数组),分两种情况处理:
情况A:你的Dict已经是Groovy Map
你当前的代码Dict = [1: {...}, 2: {...}]本身就是Map,直接用JsonBuilder就能生成大括号包裹的JSON:
def Dict = [ 1: [ "key": "CI", "value": "yash" ], 2: [ "key": "CI", "value": "ruben" ] ] def builder = new groovy.json.JsonBuilder(Dict) println builder.toString() // 输出结果:{"1":{"key":"CI","value":"yash"},"2":{"key":"CI","value":"ruben"}}
情况B:你的Dict是List(导致JsonBuilder输出数组)
如果你的Dict实际是嵌套List(比如误写为[[1: ...], [2: ...]]),先把List转换成Map,再生成JSON:
// 原始List结构 def originalList = [ [1: [key: "CI", value: "yash"]], [2: [key: "CI", value: "ruben"]] ] // 转换为Map def dict = originalList.inject([:]) { map, item -> map << item; map } // 生成JSON def builder = new groovy.json.JsonBuilder(dict) println builder.toString()
内容的提问来源于stack exchange,提问作者Yash Kamdar
相关产品推荐
相关产品推荐

