一尘不染

Powershell:如何在Json和XML对象中更新/替换数据和值

json

所以我在这里有一个问题,我似乎无法弄清楚如何更新对象中的数据值

因此,例如说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"
                    ]
                }
            }
        ]
    }
}

我让Powershell顺利阅读 convertfrom-json

我将如何执行以下操作:

A)将“橙色”从“ 2”更改为“ 100”

B)第2会议室中的“篮子”从“假”到“真”

C)在“房间1”的“糖果”中添加“泡泡糖”

我如何在不重写整个json或对象的情况下更新它


阅读 437

收藏
2020-07-27

共1个答案

一尘不染

JSON成为带有嵌套对象的自定义对象,因此实际上非常简单。首先,让我们通过在Apples值后面添加逗号来修复JSON,然后将其转换为对象…

$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

然后,如果我们要将Oranges从2更新为100,我们只需更改值即可:

$JSON.Fruits.Oragnes = 100

类似地,我们可以通过简单地列出场所,将其传递给Where语句以获取正确的房间并修改其值来修改Room 2 ForEach

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

最后,由于candies在JSON中定义为数组,因此我们可以简单地将所需的糖果添加到数组中。

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