我有以下输入 - 2 个 json 文件,一个是基础文件,第二个包含相同的属性但不同的值,我想合并这些对象。
例如:
{
a:{
b:"asda"
}
c: "asdasd"
}
Run Code Online (Sandbox Code Playgroud)
第二个文件:
{
a:{
b:"d"
}
}
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的:
{a:{b:"d"},c:"asdasd"}
Run Code Online (Sandbox Code Playgroud)
用powershell可以吗?
(见下方更新)$Json1 | Join $Json2 -Merge {$Right.$_} | ConvertTo-Json
($Json1 ConvertFrom-Json) | Merge ($Json2 ConvertFrom-Json) | ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)
结果:
{
"c": "asdasd",
"a": {
"b": "d"
}
}
Run Code Online (Sandbox Code Playgroud)
您可能会考虑不覆盖左值:
($Json1 ConvertFrom-Json) | Join ($Json2 ConvertFrom-Json) | ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)
在这种情况下,结果将是:
{
"c": "asdasd",
"a": [
{
"b": "asda"
},
{
"b": "d"
}
]
}
Run Code Online (Sandbox Code Playgroud)
详情见:https : //stackoverflow.com/a/45483110/1701026
2019 年 11 月 16
日更新该-Merge
参数已耗尽并分配到-Discern
和-Property
参数上(对不起,中断更改)。好消息是对象合并的默认参数设置包含在名为Merge-Object
(alias Merge
)的代理命令中,该命令将相关语法简化为:$Object1 | Merge $Object2
。有关详细信息,请参阅自述文件或嵌入式帮助。
Join (Join-Object) is not a built-in CmdLet
This is an extension of @Mark's answer which also recurses through child objects.
function merge ($target, $source) {
$source.psobject.Properties | % {
if ($_.TypeNameOfValue -eq 'System.Management.Automation.PSCustomObject' -and $target."$($_.Name)" ) {
merge $target."$($_.Name)" $_.Value
}
else {
$target | Add-Member -MemberType $_.MemberType -Name $_.Name -Value $_.Value -Force
}
}
}
merge $Json1 $Json2
$Json1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10011 次 |
最近记录: |