gpt4 book ai didi

json - 解析 Json 数据并插入 Yaml

转载 作者:行者123 更新时间:2023-12-05 05:18:23 25 4
gpt4 key购买 nike

我想使用 jenkins 管道解析一个 json 文件并将一些值附加到我的 Yaml 文件之一。下面是我的 Json 文件。

{
"id": "test",
"chef": {
"attributes": {
"example": {
"example": "test"
}
},
"run_list": [
"recipe[example::example]"
]
}
}

下面是我的 Yaml 文件的样子:

id: example
components:
component1:
type: example1
data:
action:
first: FullClone
chef:
default: '{"example1": { "value1": "test123" }, "run_list": ["recipe[example1::example123"]}'
component2:
type: example2

这是我正在使用的管道脚本:

pipeline {
agent any
stages {
stage {
stpes {
jsonData = readJSON file: 'test.json'
yamlData = readYaml file: 'test.yaml'
parsedJsonData = jsonData.chef
yamlData['components']['component1']['data']['chef']['default'] = "$parsedJsonData"
writeYaml file: 'newYaml.yaml', data: yamlData
sh "cat newYaml.yaml"
}
}
}
}

我得到的输出是这样的:

id: example
status: DR
components:
component1:
type: example1
data:
action:
first: FullClone
chef:
default: '[attributes:[example:[example:test]], run_list:[recipe[example::example]]]'
component2:
type: example2

但我排除了这样的输出:

id: example
components:
component1:
type: example1
data:
action:
first: FullClone
chef:
default: '{"example": { "example": "test" }, "run_list": ["recipe[example::example"]}'
component2:
type: example2

最佳答案

我认为你的问题是这一行:

yamlData['components']['component1']['data']['chef']['default'] = "$parsedJsonData"

问题出在 "$parsedJsonData" 部分。

这将调用内插数据的 toString() 方法,它看起来是一个 Map

要将其转换为 JSON 字符串表示形式,您可以使用 groovy.json.JsonOutput.html#toJson(java.util.Map)而是在您的管道中使用方法。

如果它确实是一个 Map(或一些其他类型),它将被 Script Security Plugin 默认列入白名单(参见 here )。如果不是,它可能会被列入黑名单(参见 here )。

import groovy.json.JsonOutput

// ...
yamlData['components']['component1']['data']['chef']['default'] = JsonOutput.toJson(parsedJsonData)

关于json - 解析 Json 数据并插入 Yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47992848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com