如何使用Groovy替换json文件中的参数值
是否有任何简单的方法可以使用groovy脚本将json文件deploy.json中的版本从1.0.2替换为2.6.5,下面提供了文件内容如何使用Groovy替换json文件中的参数值,json,jenkins,groovy,jenkins-pipeline,Json,Jenkins,Groovy,Jenkins Pipeline,是否有任何简单的方法可以使用groovy脚本将json文件deploy.json中的版本从1.0.2替换为2.6.5,下面提供了文件内容 { "versions": [ { "version": "1.0.2", "conf": "replian" }, { "version": "1.0.2", "conf": "hp" },
{
"versions": [
{
"version": "1.0.2",
"conf": "replian"
},
{
"version": "1.0.2",
"conf": "hp"
},
{
"version": "1.0.2",
"conf": "shutoff"
},
{
"version": "1.0.2",
"conf": "spark"
}
]
}
我尝试了下面的方法,但出现了一个错误
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
def content = """
{
"versions": [
{
"version": "1.0.2",
"conf": "replian"
},
{
"version": "1.0.2",
"conf": "hp"
},
{
"version": "1.0.2",
"conf": "shutoff"
},
{
"version": "1.0.2",
"conf": "spark"
}
]
}"""
def slurped = new JsonSlurper().parseText(content)
def builder = new JsonBuilder(slurped)
builder.content.versions.find{it.version}.version = "2.6.5"
println(builder.toPrettyString())
问题:
只替换第一个conf版本
例如
{
版本:2.6.5,
形态:replian
},
{
版本:1.0.2,
形态:hp
},
{
版本:1.0.2,
形态:关闭
},
{
版本:1.0.2,
形态:火花
}使用jq:
或awk,如果您必须:
$ awk '
BEGIN {
FPAT="([^:]*)|(\"[^\"]+\")"
OFS=":"
}
$1~"\"version\"" {
sub(/"[^"]*"/,"\"2.6.5\"",$2)
}1' deploy.json
一些输出:
{
"app": "Beach",
"Process": "steam",
"versions": [
{
"version": "2.6.5",
"conf": "replian"
}, ...
我建议groovy这样做
已编辑:请参见//已编辑行
如果您在一个解决方案中遇到sed:sed's/version:1\.0\.2/version:2.6.5/deploy.json可能与groovy.json.JsonException重复:应为“,”或“]”,但在16的数组索引上得到了当前字符“:”,int值为58,应为“,'或']',但在groovy.json.internal.jsonparsercharray.complainjsonparsercharray.java上获取了当前字符':',在16行索引67索引号1524版本:0.0.0的数组索引上的int值为58:153@itgeek哎呀。。。!我的错误。现在我已经更新了我的CodeThank Bhanu,该值替换了first config replian,但未能替换其他版本中的版本config@itgeek很高兴这有帮助。我想在替换这些值后将它们写入json文件。我可以使用下面的方法将解析后的数据写入json文件并打印文件内容吗。writeFile文件:“outputfile.json”,文本:content println“打印输出json文件:”+outputfile.json
{
"app": "Beach",
"Process": "steam",
"versions": [
{
"version": "2.6.5",
"conf": "replian"
}, ...
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
def content = """
{
"app": "Beach",
"Process": "steam",
"versions": [
{
"version": "1.0.2",
"conf": "replian"
},
{
"version": "1.0.2",
"conf": "hp"
},
{
"version": "1.0.2",
"conf": "shutoff"
},
{
"version": "1.0.2",
"conf": "spark"
}
]
}"""
def slurped = new JsonSlurper().parseText(content)
def builder = new JsonBuilder(slurped)
builder.content.versions.find{it.version}.version = "2.6.5" // Edited Line
println(builder.toPrettyString())
// Updated Line
new File ("out.json").text = builder.toPrettyString()