如何使用点符号字符串从 PSObject 获取子对象

Cha*_*ell 5 syntax powershell

提供我有以下 JSON

{
    "firstName":  "Frank",
    "lastName":  "Smith",
    "age":  "25",
    "address":  {
                    "streetAddress":  "21 3rd st",
                    "city":  "New York",
                    "state":  "NY",
                    "postalCode":  "10021"
                },
    "phoneNumber":  [
                        {
                            "type":  "home",
                            "number":  "212 555-1234"
                        },
                        {
                            "type":  "fax",
                            "number":  "646 555-4567"
                        }
                    ]
}
Run Code Online (Sandbox Code Playgroud)

我需要能够使用点表示法更新值。

$path = "C:\somePath\test.json"
$node = "address.streetAddress"         # should also work with "phoneNumber[0].number"
$value = "21 Jump St."

$config = Get-Content -Path $path -Raw | ConvertFrom-Json
$config.$node = $value
Write-Host $config.$node

#Set-Content $path $($config | ConvertTo-Json)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是找不到该属性。

异常设置“address.streetAddress”:“在此对象上找不到属性‘address.streetAddress’。请验证该属性是否存在并且可以设置。”

我需要做什么才能传入点分符号并更新适当的值?

Kei*_*ill 4

虽然您可以将单个属性名称放入变量中并使用它来访问该属性,但您不能对多个点属性执行此操作。您可以使用 Invoke-Expression 解决此问题:

Invoke-Expression "`$config.$node = `$value"
Run Code Online (Sandbox Code Playgroud)