json看起来像这样:
{
"Workflow": [
{
"Parameters": {
"Project": "/Path/To/File",
"OtherParam": "True"
}
}
],
"Overrides": [
{
"Special": {
"Parameters": {
"NewParam": "NewStuffGoesHere",
"OtherParam": "False"
}
}
}
]
}
字符串
.我想使用Overrides.Special
部分来添加或更新工作流对象中的字段。换句话说,给定上面的json,我想这样做:
$config = Get-Content workflow.json | out-string | ConvertFrom-Json
$configWithOverrides = Merge-Object $config.Workflow $config.Overrides.Special
型
最后得到这样的结果:
$configWithOverrides
Parameters
----------
@{Project=/Path/To/File; NewParam=NewStuffGoesHere; OtherParam=False}
型
我当然可以编写上面的Merge-Object
函数来根据override部分中的内容添加或更新所需的值,但似乎应该(可能?)有一种内置或一行程序的方式来处理这一点。
我试过这个:
$test = $config.Workflow + $config.Overrides.Special
型
……但这不太管用。
$test
Parameters
----------
@{Project=/Path/To/File; OtherParam=True}
@{NewParam=NewStuffGoesHere; OtherParam=False}
型
这样可以添加参数:
>$test.Parameters.NewParam
NewStuffGoesHere
型
。但这对更新它们来说并不太好
>$test.Parameters.OtherParam
True
False
型
注意-在这个例子中,我选择在将json转换为psobject之后处理合并,但这不是必需的。
1条答案
按热度按时间v09wglhw1#
我有一个一行程序来做你所要求的。注意,据我所知,PowerShell不直接处理JSON字符串。但是,一旦转换为PowerShell对象,它就像任何其他对象一样。
所以,首先,定义你的json文件,并将其作为一个字符串读取:
字符串
定义你想要合并json对象的属性,以及第一个和第二个对象:
型
现在,请看一行代码(为了清晰起见,我将其分为3部分):
型
$MergedJson
包含以下字符串(使用json字符串):型
这就是你要找的吗
P.S.:如果你交换了$1和$2的角色,通用参数(如
OtherParam
)的值会改变。