Как подставить значение параметра в файл json с помощью Groovy - PullRequest
0 голосов
/ 09 марта 2019

Есть ли простой способ заменить версию с " 1.0.2 " на " 2.6.5 " в файле json " deploy.json msgstr "с использованием Groovy сценариев, и содержание файла было предоставлено ниже.

{
  "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, например, {"version": "2.6.5 "," conf ":" replian "}, {" version ":" 1.0.2 "," conf ":" hp "}, {" version ":" 1.0.2 "," conf ":" shutoff"}, {" version ":" 1.0.2 "," conf ":" spark "}

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Использование jq:

$ jq '.versions[].version="2.6.5"' deploy.json
{
  "app": "Beach",
  "Process": "steam",
  "versions": [
    {
      "version": "2.6.5",
      "conf": "replian"
    }, ...

Или 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"
        }, ...
0 голосов
/ 09 марта 2019

Если вам интересно решение с помощью sed: sed 's/"version": "1\.0\.2"/"version": "2.6.5"/ deploy.json

0 голосов
/ 09 марта 2019

Я хотел бы предложить groovy сделать это.

Отредактировано: См. // Edited Line

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()
...