如何使用Groovy替换json文件中的参数值

如何使用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" },

是否有任何简单的方法可以使用groovy脚本将json文件deploy.json中的版本从1.0.2替换为2.6.5,下面提供了文件内容

{
  "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()