json - 将带空格的参数传递到 AWS cli
问题描述
我正在尝试将带有空格的参数传递给aws cloudformation create-stack
aws cli。
问题是我的参数有空间。我正在使用 powershell 编写脚本。
下面是我的参数示例
$JsonParameter = '[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test Engineer"}]'| ConvertTo-Json
这返回
"[{\"ParameterKey\":\"name\",\"ParameterValue\":\"John\"},{\"ParameterKey\":\"Occupation\",\"ParameterValue\":\"Test Engineer\"}]"
cli命令是
aws cloudformation create-stack --stack-name $stackName --template-url $templateUrl --capabilities $capabilityList --parameters $JsonParameter --region "us-east-1"
错误发生了
Error parsing parameter '--parameters': Invalid JSON:
[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test
从错误来看,cli 不喜欢 ParameterValue 中的空格。如何转义空间,以便 cli 不会抱怨值中的空间?
解决方案
删除| ConvertTo-Json
.
您的字符串已经是 json 字符串,因此您不想执行转换。
$JsonParameter = '[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test Engineer"}]'
只需按原样使用字符串。
替代方案
如果您使用的是 Powershell 对象而不是 json 字符串,您可能希望在某些时候将其转换为 json 以将其作为参数传递给您的 aws 调用。
那是ConvertTo-Json
展示自己有用的时刻。
以此为例
$JsonParameter = @(
@{
ParameterKey = 'name'
ParameterValue = 'John'
},
@{
ParameterKey = 'Occupation'
ParameterValue = 'Test Engineer'
}
)
这是一个 Powershell 对象,您可能在不同的上下文中从头开始构建该对象,目的是将其作为 json 参数传递给您的 aws 调用。
现在,要实现从“哈希表数组”状态到有效 json 字符串的转换,您需要使用ConvertTo-Json
cmdlet。
$JsonParameterString = $JsonParameter | Convertto-json -Compress
生成的字符串与您最初的相同,准备传递给 aws :
[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test Engineer"}]
另一方面,如果您有一个 json 字符串并且需要毫不费力地对其进行编辑,则可以使用ConvertFrom-Json
cmdlet,然后根据需要编辑生成的对象,并在将其传递之前再次将其转换回 json。
附加说明
在我的 Powershell to Json 示例中,我使用了-compress
switch 参数。这是可选的。这将创建一个压缩的 json 字符串(一行)而不是扩展的。
参考
推荐阅读
- html - HTML H[1-6] 从 _type.scss 中获取默认值
- python-3.x - Django查询中的三元运算符不起作用
- spring-cloud-dataflow - 我们可以使用在多个节点中运行的基于 Spring Cloud 的微服务作为 SCDF 应用程序吗?
- java - 如何检索核心的子模块属性?
- javascript - 执行 XHR 请求时,如何防止应用程序布局呈现两次?
- dictionary - 从文件加载服务器名称时,Nginx 无法解析服务器名称
- flask - 在搜索期间将 SQLAlchemy 表列传递给 Flask 路由
- audio - 在与音频播放同步的脚本中突出显示文本
- c++ - 两个词有多相似?
- javascript - 从数据库中的iso日期获取日期和年份