PowerShell中如何将变量值嵌入JSON字符串的双引号内
问题原因
PowerShell中单引号包裹的字符串为字面量字符串,不会对内部的变量、表达式做解析展开,这就是你代码里$name没有被替换成实际值的核心原因。
解决方案
方案1:外层使用双引号定义可扩展字符串
PowerShell双引号包裹的字符串支持变量自动展开,你只需要把外层的单引号换成双引号,内部需要保留的双引号用反引号`转义即可:
$name="abc" $json = "{\`"name\`":\`"$name\`",\`"projectId\`":\`"10034\`"}" $json
执行后输出即为你期望的结果:{\"name\":\"abc\",\"projectId\":\"10034\"}
方案2:使用字符串格式化操作符-f
如果你想保留外层单引号的写法,可以用PowerShell的格式化操作符做占位符替换,写法更清晰,也能避免多层引号转义混乱:
$name="abc" $json = '{\"name\":\"{0}\",\"projectId\":\"10034\"}' -f $name $json
方案3(推荐):使用ConvertTo-Json自动构造JSON
如果你的最终目标是生成合法JSON字符串,更稳妥的方式是先构造PowerShell对象,再用内置命令转换,自动处理转义、格式问题,不会出现手写JSON的语法错误:
$name="abc" $obj = [PSCustomObject]@{ name = $name projectId = "10034" } # 加-Compress参数输出压缩后的单行JSON,不加的话会输出格式化多行结构 $json = $obj | ConvertTo-Json -Compress # 如果你需要额外给双引号加反斜杠转义(比如要把JSON放到另一个字符串里),可以再加一步替换 $json = $json.Replace('"', '\"') $json
内容的提问来源于stack exchange,提问作者Aatif Akhter
相关产品推荐
相关产品推荐

