Reputation: 111
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
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