Merge two json objects

Viewed 13356

I have the following inputs - 2 json files one is the base one and the second contains the same properties but the different values, I'd like to merge that objects.

For example:

{
  a:{
    b:"asda"
  }
  c: "asdasd"
}

And the second file:

{
  a:{
   b:"d"
  }
}

And the result should be like this:

{a:{b:"d"},c:"asdasd"}

Is that is possible with powershell?

3 Answers

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
Related