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

20,786

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'}
Share:
20,786
AdilZ
Author by

AdilZ

Updated on July 09, 2022

Comments

  • AdilZ
    AdilZ almost 2 years

    So I am having a bit of a problem here, I can't seem to figure out how to update data values in an Object

    so lets say for example the FOLLOWING 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"
                        ]
                    }
                }
            ]
        }
    }
    

    I have Powershell read it smoothly with convertfrom-json

    How would I do the following:

    A) Change "Oranges" from "2" to "100"

    B) "Baskets" in Room 2 from "false" to "true"

    C) add "bubblegum" to "candies" in Room1

    HOW can I update this without rewriting the WHOLE json or object?