我试图在PowerShell中编辑一个通过导入JSON文件创建的对象,然后尝试使用点标记法访问或修改对象的属性。
例如,下面是JSON示例和代码片段
{
"menus": {
"menu1": {
"position": "left"
}
}
}
# Import the file
$settings = Get-Content -Path somefile.json | ConvertFrom-Json
# Specify the property to change
$valueToChange = "menus.menu1.position"
$value = "left"
# Set the appropriate value according to the variables above
$settings.$valueToChange = $value
以上给出了:
设置“menus.menu1.position”时出现异常:在此对象上找不到属性“menus.menu1.position”。请验证该属性是否存在并且可以设置。
然而,如果我做完全相同的事情,而不使用点符号中的变量,它就可以工作。
# Import the file
$settings = Get-Content -Path somefile.json | ConvertFrom-Json
# Specify the property to change
$value = "left"
# Set the appropriate value according to the variables above but with a hard coded dot notation
$settings.menus.menu1.position = $value
我猜这与变量是字符串或类似的变量有关,但问题是我需要通过编程计算点符号,以设置文件中的值,或至少允许用户指定它。
实际上,我现在已经解决了这个问题(完全避免了这种方法),但我想看看这是否可能。
即使是一个干净的点符号的替代品也会很好地看到。我一开始使用它的唯一原因是因为我真实的的JSON对象相当复杂,而点符号非常简单,很容易遵循。
3条答案
按热度按时间k5hmc34c1#
除非您使用
Invoke-Expression
(即strongly discouraged),否则您在PowerShell中无法尝试执行此操作。你可以使用一个递归函数,例如:
注意,这只是一个非常基本的草稿,没有任何错误处理。
wlzqhblo2#
这似乎行得通(编辑:我后来发现它没有):
或不:
这是可行的,尽管我不确定它是否方便:
ubby3x7f3#
使用$()或() Package 变量语法适用于5.1及更高版本。示例:
---------------或-----------