我的json看起来像这样:
{
"Workflow": [
{
"Parameters": {
"Project": "/Path/To/File",
"OtherParam": "True"
}
}
],
"Overrides": [
{
"Special": {
"Parameters": {
"NewParam": "NewStuffGoesHere",
"OtherParam": "False"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
...我想使用该Overrides.Special部分添加或更新工作流对象中的字段.换句话说,鉴于上面的json,我想做这样的事情:
$config = Get-Content workflow.json | out-string | ConvertFrom-Json
$configWithOverrides = Merge-Object $config.Workflow $config.Overrides.Special
Run Code Online (Sandbox Code Playgroud)
并最终得到这样的东西:
$configWithOverrides
Parameters
----------
@{Project=/Path/To/File; NewParam=NewStuffGoesHere; OtherParam=False}
Run Code Online (Sandbox Code Playgroud)
我当然可以Merge-Object根据覆盖部分中的内容编写上面的函数来根据需要添加或更新值,但似乎应该(可以?)是内置或单行方式来处理它.
我试过这个:
$test = $config.Workflow + $config.Overrides.Special
Run Code Online (Sandbox Code Playgroud)
......但这不太有效.
$test
Parameters
----------
@{Project=/Path/To/File; OtherParam=True}
@{NewParam=NewStuffGoesHere; OtherParam=False}
Run Code Online (Sandbox Code Playgroud)
这样可以添加参数:
>$test.Parameters.NewParam
NewStuffGoesHere
Run Code Online (Sandbox Code Playgroud)
......但是更新它们并不是那么好
>$test.Parameters.OtherParam
True
False
Run Code Online (Sandbox Code Playgroud)
注意 - 在这个例子中,我选择在将json转换为psobject之后处理合并,但这不是必需的.
小智 6
我有一个单行来做你想要的.请注意,据我所知,PowerShell不直接处理json字符串.但是,一旦转换为PowerShell对象,它就像任何其他对象一样.
因此,首先,定义您的json文件,并将其作为单个字符串读取:
# Requires -Version 4
$jsonFile='c:\temp\jsonfile.json'
$jsonObj=@(gc $jsonFile -raw)|ConvertFrom-Json
Run Code Online (Sandbox Code Playgroud)
定义要合并json对象以及第1和第2个对象的属性:
$property='Parameters'
$1=$jsonObj.Workflow.$property
$2=$jsonObj.Overrides.Special.$property
Run Code Online (Sandbox Code Playgroud)
现在,看一行(为了清楚起见,我将其拆分为3):
$MergedJson=[pscustomobject]@{
$property=$2.psobject.properties|%{$11=$1}{$11|add-member $_.name $_.value -ea Ignore}{$11}
}|ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)
你看?$MergedJson保存以下字符串(使用您的json字符串):
{
"Parameters": {
"Project": "/Path/To/File",
"OtherParam": "True",
"NewParam": "NewStuffGoesHere"
}
}
Run Code Online (Sandbox Code Playgroud)
这就是你要找的东西吗?
PS:如果你换掉1美元和2美元的角色,那么普遍的参数'(比如OtherParam)值会占上风,会发生变化.
| 归档时间: |
|
| 查看次数: |
5123 次 |
| 最近记录: |