【发布时间】:2021-10-22 21:17:50
【问题描述】:
在 Groovy 中,我必须更新 JSON 有效负载中的值并进行 API 调用。由于字段嵌入在反斜杠中,我在更新有效负载时遇到了挑战。是否有一种更简单的方法可以直接更新以下有效负载中的服务器,即更新 1. JSON 负载 到 2。更新 JSON 负载(更新名称和主机值)。
1. JSON 负载:
{
"environment": "dev",
"config": "Create",
"configType": "Server",
"ServerName": "",
"Servers": "[\\{\"name\":\"Server-test_1\",\"host\":\"test.com\",\"port\":\"443\",\"tls\":\"2-way\"}]",
"tsHost": "",
"tsPort": "",
"tsSSLOption": "1-way"
}
2。更新的 JSON 负载:
{
"environment": "dev",
"config": "Update",
"configType": "Server",
"ServerName": "",
"Servers": "[\\{\"name\":\"Server-test_2\",\"host\":\"test123.com\",\"port\":\"443\",\"tls\":\"2-way\"}]",
"tsHost": "",
"tsPort": "",
"tsSSLOption": "1-way"
}
在下面尝试(在转换过程中丢失反斜杠):
代码:
def json = $/ {
"environment": "dev",
"config": "Create",
"configType": "Server",
"ServerName": "",
"Servers": "[\\{\"name\":\"Server-test_1\",\"host\":\"test.com\",\"port\":\"443\",\"tls\":\"2-way\"}]",
"tsHost": "",
"tsPort": "",
"tsSSLOption": "1-way"
}
/$
def parser = new JsonSlurper()
def jsonResp = parser.parseText(json)
println(jsonResp.Servers)
jsonResp.Servers.name = "Server-test_2"
jsonResp.Servers.host = "test123.com"
【问题讨论】:
-
这些字段没有嵌入到反斜杠中。反斜杠转义以下字符。见Introducing JSON, string。
-
你能发布你的 Groovy 代码吗?另外为什么大括号前有转义字符?如果您发布 Groovy 代码,我将为您解决问题。但要清楚反斜杠只是转义字符。另外,这是在詹金斯还是只是时髦?你的标签上写着 Jenkins
-
我第二个克里斯。如果这是在 Jenkins 中,它属于哪个项目类型?
-
@ChrisMaggiulli 我在管道中使用 groovy 脚本来实现一个功能。 (这只是 groovy,很抱歉造成混淆)。 API 需要有效载荷中发布的格式的数据。用代码部分中的代码更新了帖子。
-
您遇到了问题,因为 servers 属性的值是一个字符串,而不是一个 json 对象数组。您需要将字符串转换为 json 对象数组,然后才能像 json 一样与它进行交互。它与转义字符无关。然后,根据 API,您可能需要将其转换回字符串,此时应为您管理转义字符。也就是说,如果我对你的理解是正确的,我仍然不能 100% 确定
标签: jenkins groovy jenkins-groovy groovyshell groovy-console