首页 > 解决方案 > 用jq替换成云参数值

问题描述

我正在尝试在下面的 Cloudformation 参数文件中用 ParameterValue:test 替换项目 ParameterKey:Project

    [{
  "ParameterKey": "Project",
  "ParameterValue": "<changeMe>"
 }, 
 {
  "ParameterKey": "DockerInstanceType",
  "ParameterValue": "m3.medium"
}]

我正在尝试在 jq 命令下执行

cat config.json |              
  jq "map(if .ParameterKey == "Project"
          then . + {\"ParameterValue\":\"test\"}
          else .
          end)" > populated_config.json

我收到以下错误

jq: error: Project/0 is not defined at <top-level>, line 1:
map(if .ParameterKey == Project                        
jq: 1 compile error

标签: amazon-cloudformationjq

解决方案


您过早地关闭了传递给的字符串,因为您jq没有在等式中转义“Project”的引号。

您可以通过用单引号将表达式括起来来简化,并且不需要转义:

$ cat config.json | jq 'map(if .ParameterKey == "Project" then . + {"ParameterValue":"test"} else . end)'
[
  {
    "ParameterKey": "Project",
    "ParameterValue": "test"
  },
  {
    "ParameterKey": "DockerInstanceType",
    "ParameterValue": "m3.medium"
  }
]

推荐阅读