Удалите атрибут из объекта JSON в PowerShell

Oct 01 2020

Я следую JSON, и я хотел бы удалить улицы из объекта JSON в разделе Address, который является массивом. Я пытаюсь сделать это в PowerShell

{
  "Customer": [
    {
      "id": "123"
    }
  ],
  "Nationality": [
    {
      "name": "US",
      "id": "456"
    }
  ],
  "address": [
    {
      "$type": "Home", "name": "Houston", "streets": [ { "name": "Union", "postalCode": "10", } ] }, { "$type": "Office",
      "name": "Hawai",
      "streets": [
        {
          "name": "Rock",
          "postalCode": "11",
        }
      ]
    }
  ],
  "address": [
    {
      "$type": "Home1", "name": "Houston", "streets": [ { "name": "Union1", "postalCode": "14", } ] }, { "$type": "Office1",
      "name": "Hawaii1",
      "streets": [
        {
          "name": "Rock1",
          "postalCode": "15",
        }
      ]
    }
  ],
}

Я хотел бы удалить улицы из объекта JSON, и вот мой сценарий PowerShell, но он не работает! Я пытаюсь преобразовать JSON в объект, а затем перебрать свойства, чтобы удалить их.

$FileContent = Get-Content -Path "Test.json" -Raw | ConvertFrom-Json foreach ($content in $FileContent) { #Write-Host $content.address
    $content.address = $content.address | Select-Object * -ExcludeProperty streets
}

$FileContent | ConvertTo-Json -Depth 100 | Out-File "Test.json" -Force

Ответы

5 TheMadTechnician Oct 01 2020 at 07:12

Когда вы ConvertFrom-Jsonего используете, он автоматически преобразует вещи в объекты. Как только они являются объектами, вы можете использовать их, Select-Objectчтобы указать, какие свойства вы хотите включить в конвейер, с помощью которых вы можете просто установить $FileContent.address(массив объектов) равным самому себе, исключая свойство улиц из каждого объекта в массиве.

$FileContent = Get-Content -Path "Test.json" -Raw | ConvertFrom-Json
$FileContent.address = $FileContent.address | Select-Object * -ExcludeProperty streets
$FileContent | ConvertTo-Json