Rony Varghese
Rony Varghese

Reputation: 111

Powershell script to append to JSON array

I am struggling to add new element to an existing JSON array using PowerShell scripting. Here is the JSON file structure that I have.

[
  {
    "Company": [
      {
        "Finance": [
          {
            "StaffName": "Name1",
            "StaffRating": "Rating1"
          }
        ],
        "HR": [
          {
            "StaffName": "Name1",
            "StaffRating": "Rating1"
          },
          {
            "StaffName": "Name2",
            "StaffRating": "Rating2"
          }
        ]
      }
    ]
  }
]

I am trying to append the following object to the "Company"->"HR" section:

{
            "StaffName": "Name3",
            "StaffRating": "Rating3"
}

I tried using '+=' with no luck. This code doesn't work, as it removes the contents from the file without throwing any errors:

    $FromJSON =  Get-Content  $JsonfilePath -raw  | ConvertFrom-Json
    $versionDataFromJSON.Company.HR += [pscustomobject] @{ StaffName= 'Name3'},[pscustomobject] @{ StaffRating= 'Rating3' }

    $FromJSON | ConvertTo-Json  | Set-Content $JsonfilePath

Here's the JSON that I want to get:

[
  {
    "Company": [
      {
        "Finance": [
          {
            "StaffName": "Name1",
            "StaffRating": "Rating1"
          }
        ],
        "HR": [
          {
            "StaffName": "Name1",
            "StaffRating": "Rating1"
          },
          {
            "StaffName": "Name2",
            "StaffRating": "Rating2"
          },

           { "StaffName": "Name3",
            "StaffRating": "Rating3"
          }
        ]
      }
    ]
  }
]

Upvotes: 1

Views: 6275

Answers (1)

postanote
postanote

Reputation: 16096

How about this way...

$JsonDataAdd = @"
{
            "StaffName": "Name3",
            "StaffRating": "Rating3"
}
"@

$JsonData = @"
[
  {
    "Company": [
      {
        "Finance": [
          {
            "StaffName": "Name1",
            "StaffRating": "Rating1"
          }
        ],
        "HR": [
          {
            "StaffName": "Name1",
            "StaffRating": "Rating1"
          },
          {
            "StaffName": "Name2",
            "StaffRating": "Rating2"
          }
        ]
      }
    ]
  }
]
"@ | ConvertFrom-JSON

($JsonData + ($JsonData.Company.HR += (ConvertFrom-Json $JsonDataAdd)))

Company                                         
-------                                         
{@{Finance=System.Object[]; HR=System.Object[]}}



$JsonData.Company

Finance                                   HR                                                                                                               
-------                                   --                                                                                                               
{@{StaffName=Name1; StaffRating=Rating1}} {@{StaffName=Name1; StaffRating=Rating1}, @{StaffName=Name2; StaffRating=Rating2}, @{StaffName=Name3; StaffRat...



$JsonData.Company.Finance

StaffName StaffRating
--------- -----------
Name1     Rating1    



$JsonData.Company.HR

StaffName StaffRating
--------- -----------
Name1     Rating1    
Name2     Rating2    
Name3     Rating3    



$JsonData.Company | ConvertTo-Json
{
    "Finance":  [
                    {
                        "StaffName":  "Name1",
                        "StaffRating":  "Rating1"
                    }
                ],
    "HR":  [
               {
                   "StaffName":  "Name1",
                   "StaffRating":  "Rating1"
               },
               {
                   "StaffName":  "Name2",
                   "StaffRating":  "Rating2"
               },
               {
                   "StaffName":  "Name3",
                   "StaffRating":  "Rating3"
               }
           ]
}


$JsonData | ConvertTo-Json -Depth 4

{
    "Company":  [
                    {
                        "Finance":  [
                                        {
                                            "StaffName":  "Name1",
                                            "StaffRating":  "Rating1"
                                        }
                                    ],
                        "HR":  [
                                   {
                                       "StaffName":  "Name1",
                                       "StaffRating":  "Rating1"
                                   },
                                   {
                                       "StaffName":  "Name2",
                                       "StaffRating":  "Rating2"
                                   },
                                   {
                                       "StaffName":  "Name3",
                                       "StaffRating":  "Rating3"
                                   }
                               ]
                    }
                ]
}

Upvotes: 1

Related Questions