1

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"
          }
        ]
      }
    ]
  }
]
1
  • 3
    Try $FromJSON.Company.HR += [pscustomobject] @{ StaffName= 'Name3'; StaffRating= 'Rating3' } and take note of the -Depth parameter of ConvertTo-Json cmdlet. Commented Mar 30, 2019 at 21:00

1 Answer 1

1

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"
                                   }
                               ]
                    }
                ]
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.