jsonpowershellobject-graph

Merge two json objects


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?


Solution

  • $Json1 | Join $Json2 -Merge {$Right.$_} | ConvertTo-Json (see update below)

    Install-Module -Name JoinModule
    ($Json1 ConvertFrom-Json) | Merge ($Json2 ConvertFrom-Json) | ConvertTo-Json
    

    Result:

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

    You might consider not to overwrite the left value:

    ($Json1 ConvertFrom-Json) | Join ($Json2 ConvertFrom-Json) | ConvertTo-Json
    

    In that case the result will be:

    {
        "c":  "asdasd",
        "a":  [
                  {
                      "b":  "asda"
                  },
                  {
                      "b":  "d"
                  }
              ]
    }
    

    For details see: https://stackoverflow.com/a/45483110/1701026


    Update 2019-11-16
    The -Merge parameter has been depleted and divided over the -Discern and -Property parameters (sorry for the breaking change). The good news is that the default parameter settings for an object merge are accommodated in a proxy command named Merge-Object (alias Merge) which simplifies the concerned syntax to just: $Object1 | Merge $Object2. For details, see readme or embedded help.


    Note 2024-03-17
    For handeling more complex object-graphs, you might consider this Object-Graph toolset