如何更新 JSON 文档中给定的环境变量值

如何更新 JSON 文档中给定的环境变量值

我需要使用下面的 JSON 文件作为输入,并且该文件可以包含多个变量条目。我需要在环境变量中搜索var1orvar2并替换下面 JSON 中的值。

{
  "var1": "valueplaceholder",
  "var2": "valueplaceholder"
}

我尝试了下面的命令

cat input.json | sed "s/\"\([A-Z0-9_]*\)\":\s*\"\([A-Za-z0-9_]*\)\"/\"\1\": \"$\1\"/g"

但它会创建类似的输出

{
  "var1": "$var1",
  "var2": "$var2"
}

如何获取变量的值?即我需要$var1代替 text的值$var1

答案1

给定

$ cat file.json
{ "var1": "valueplaceholder", "var2": "valueplaceholder", "var3": "valueplaceholder" }

然后,借用该with_entries结构如何使用jq交换对象的键和值?并利用 jq 的$ENV数组:

$ export var1="foo" var2="bar"
$ jq 'with_entries( .value = $ENV[.key] )' file.json
{
  "var1": "foo",
  "var2": "bar",
  "var3": null
}

或者如果您想将不匹配的变量设置为空字符串或保留原始值

$ jq 'with_entries( .value = ($ENV[.key] // "") )' file.json
{
  "var1": "foo",
  "var2": "bar",
  "var3": ""
}

或者

$ jq 'with_entries( .value = ($ENV[.key] // .value) )' file.json
{
  "var1": "foo",
  "var2": "bar",
  "var3": "valueplaceholder"
}

或者,如果你想删除不存在的键

$ jq 'with_entries( .value = ($ENV[.key] // empty) )' file.json
{
  "var1": "foo",
  "var2": "bar"
}

相关内容