gpt4 book ai didi

json - 在Powershell中合并JSON对象

转载 作者:行者123 更新时间:2023-12-04 04:16:50 26 4
gpt4 key购买 nike

我有看起来像这样的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函数,以根据覆盖部分中的内容根据需要添加或更新值,但是似乎应该(可以?)采用内置或单线方式来处理此问题。

我尝试了这个:
$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之后处理合并,但这不是必需的。

最佳答案

我有一个类轮可以满足您的要求。请注意,据我所知,PowerShell不会使用json字符串直接处理。但是,一旦转换为PowerShell对象,就如同其他任何对象一样。

因此,首先,定义您的json文件,并将其作为单个字符串读取:

# Requires -Version 4
$jsonFile='c:\temp\jsonfile.json'
$jsonObj=@(gc $jsonFile -raw)|ConvertFrom-Json

定义要在其上合并json对象,第一个对象和第二个对象的属性:
$property='Parameters'
$1=$jsonObj.Workflow.$property
$2=$jsonObj.Overrides.Special.$property

现在,查看单线(为清楚起见,我将其分为三部分):
$MergedJson=[pscustomobject]@{
$property=$2.psobject.properties|%{$11=$1}{$11|add-member $_.name $_.value -ea Ignore}{$11}
}|ConvertTo-Json

你看? $MergedJson保存以下字符串(使用您的json字符串):
{
"Parameters": {
"Project": "/Path/To/File",
"OtherParam": "True",
"NewParam": "NewStuffGoesHere"
}
}

那是您要找的东西吗?

附注:如果您互换$ 1和$ 2的角色,则占主导地位的通用参数值(如 OtherParam)将发生变化。

关于json - 在Powershell中合并JSON对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com