web-dev-qa-db-ja.com

Powershell:JsonおよびXMLオブジェクトのデータと値を更新/置換する方法

だから私はここで少し問題を抱えています、私はオブジェクトのデータ値を更新する方法を理解できないようです

たとえば、次の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)Room1の「キャンディー」に「バブルガム」を追加する

jsonまたはオブジェクト全体を書き換えずにこれを更新するにはどうすればよいですか

5
AdilZ

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

次に、オレンジを2から100に更新する場合は、値を変更するだけです。

$JSON.Fruits.Oragnes = 100

同様に、場所を一覧表示し、それをWhereステートメントに渡して適切な部屋を取得し、ForEachループの値を変更するだけで、部屋2を変更できます。

$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'}
7