我有一个将JSON文件作为参数并将其转换为object的PowerShell脚本。在JSON字符串(作为模板)中,可能有一些变量应该在运行时替换为实际值。例如,JSON字符串中的$var_1
、$var_x
和$var_y
:
{
"key1": "My name is ${var_1}",
"key2":
{
"key3": "Another variable ${var_x}",
"key4": "${var_y}"
}
}
这些变量的名称对于脚本来说是未知的。我使用ExpandString来完成这项工作:
[string]$jsonText = Get-Content $inputFile;
if ([string]::IsNullOrWhiteSpace($jsonText)) {
throw "No content in $inputFile"
}
$temp = $ExecutionContext.InvokeCommand.ExpandString($jsonText);
$jsonObj = ConvertFrom-Json $temp;
问题是,当变量包含双引号时,调用ConvertFrom-Json
将失败,因为引号没有转义。例如,"My name is ${var_1}"
可能会变成"My name is a "new" name"
。
有没有办法在调用ExpandString时对这些字符串变量进行转义?
发布于 2018-05-30 11:42:54
这种格式是允许的吗?如果变量用""
括起来,那么它就是一个字符串,并且不会在.json
中添加标记。例如:
$var_1 = "Json Sample"
$json_piece = @"
{
"key1": "My name is $var_1",
"key2":
{
"key3": "Another variable $var_2",
"key4": "$var_3"
}
}
"@
It输出(未定义$var_2和$var_3 ):
{
"key1": "My name is Json Sample",
"key2":
{
"key3": "Another variable ",
"key4": ""
}
}
如果将"
添加到json文件中,如下所示:
{
"key1": "My name is "Json Sample"",
"key2":
{
"key3": "Another variable ",
"key4": ""
}
}
你会犯一个错误:除了逗号。这意味着如果变量包含""
,您必须首先对它们进行转义,否则.json
文件是意外的。
附注:Validation我在FREEFORMATTER.COM上验证过了。
这是我的代码:
{
"Key": "value is "value"",
"key2": "other value"
}
我得到了两个错误:
https://stackoverflow.com/questions/50594839
复制相似问题