Powershell: How to Update/Replace data and values in Json and XML Object Powershell: How to Update/Replace data and values in Json and XML Object powershell powershell

Powershell: How to Update/Replace data and values in Json and XML Object


The JSON becomes a custom object with nested objects, so really it is fairly simple. To start, let's fix the JSON by adding a comma after the Apples value, and convert it to an object...

$JSON = @'{"People":  263,"Hungry":  true,"Fruits":  {                "Apples":  1,                "Oranges":  2            },"Places":  {              "Places":  [                            {                                "Baskets":  "true",                                "name":  "Room 1",                                "candycount":  1500,                                "candytypespresent":  {                                                     "candies":  [                                                                     "caramel"                                                                 ]                                                 }                            },                            {                                "Baskets":  "false",                                "name":  "Room 2",                                "candycount":  2000,                                "candytypespresent":  {                                                     "candies":  [                                                                    "caramel",                                                                    "jawbreaker",                                                                    "butterscotch"                                                                                                                                    ]                                                }                            }                        ]          }}'@ | ConvertFrom-JSON

Then if we want to update Oranges from 2 to 100 we simply change the value:

$JSON.Fruits.Oranges = 100

Similarly we can modify the Room 2 by simply listing the Places, passing it to a Where statement to get the right room, and modify the value in a ForEach loop.

$JSON.Places.Places | Where{$_.name -eq 'Room 2'} | ForEach{$_.Baskets = 'true'}

Lastly, since candies is defined as an array in the JSON we can simply add the desired candy to the array.

$JSON.Places.Places | Where{$_.name -eq 'Room 1'} | ForEach{$_.CandyTypesPresent.candies += 'bubblegum'}