单引号字符串中的 Powershell 变量扩展

use*_*838 3 powershell json variable-expansion single-quotes


我需要构建一个 JSON 变量,其中包含另一个 JSON 格式的内容,该内容应格式化为字符串。我将内部 JSON 放入单引号中,这样它就不会与外部 JSON 一起被解析。内部 JSON 包含一个应该扩展的变量。不幸的是,单引号阻止了这一点。
例子:

$link = "http://www.google.de"
$event = @{
   var1 = "sys"
   var2 = "yadda"
   inner_json = '"System": {"link":"$link"}}'
}
$json = $event | ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)

变量 $inner_json 必须作为字符串嵌入。有没有办法强制在单引号内扩展 $link ?还有其他想法如何解决这个问题吗?任何帮助表示赞赏。
编辑:我期待这样的inner_json:

{"var1":"sys", "var2":"yadda", "inner_json": "{\"System\": {\"link\":\"google.de\"}}"}
Run Code Online (Sandbox Code Playgroud)

iRo*_*Ron 5

如果您准备对象(使用 aHashTablePSCustomObject),变量(以 a 开头$,包括$var1, $inner_json)无论如何都会自动扩展。
我想你想这样做:

$link = "http://www.google.de"
$event = @{
    var1 = 'sys'
    var2 = 'yadda'
    inner_json = @{
        System = @{
            link = $link
        }
    }
}
$event | ConvertTo-Json

{
  "inner_json": {
    "System": {
      "link": "http://www.google.de"
    }
  },
  "var2": "yadda",
  "var1": "sys"
}
Run Code Online (Sandbox Code Playgroud)

基于添加的期望:
*注意:
双引号在 json 中会自动用反斜杠 ( \) 转义。
要在 PowerShell 中转义双引号,请使用反引号:( `)

$link = "http://www.google.de"
$event = @{
    var1 = 'sys'
    var2 = 'yadda'
    inner_json = "{`"System`": {`"link`":`"$Link`"}}"
}
$event | ConvertTo-Json

{
  "inner_json": "{\"System\": {\"link\":\"http://www.google.de\"}}",
  "var2": "yadda",
  "var1": "sys"
}
Run Code Online (Sandbox Code Playgroud)

但最好不要构造 Json 字符串(包括内部 Json 字符串),并从对象创建内部 Json 并将该字符串逐字嵌入到外部 Json 中:

$link = "http://www.google.de"
$event = @{
    var1 = 'sys'
    var2 = 'yadda'
    inner_json = @{System = @{link = $Link}} | ConvertTo-Json -Compress
}
$event | ConvertTo-Json

{
  "inner_json": "{\"System\":{\"link\":\"http://www.google.de\"}}",
  "var2": "yadda",
  "var1": "sys"
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果属性的顺序很重要,您可以使用 ```$event = [ordered] @{ ... }``` 创建 OrderedDictionary 而不是哈希表 (2认同)