2017-06-30 1 views
2

Ich versuche, das vollständige Objekt aus dem Array nicht ein Mitglied des Objekts zu entfernen. Ich bin nicht in der Lage, den Weg zum Entfernen des Objekts zu finden, gibt es so viele Lösungen verfügbar, um das Element zu entfernen. Kann jemand bitte einen Weg vorschlagen, das komplette Objekt zu entfernen.Wie entfernt man ein Objekt aus dem Array in der Power Shell?

JSON Data: JSON data stored in the file. 

{ 
    "data": [ 
    { 
     "id": "Caption", 
     "firstname": "Caption", 
     "lastname": "test", 
     "email": "test", 
     "requester": "test", 
     "password": "test", 
     "incNumber": "test" 
    } 
    ] 
} 

Code : I have written the following code to read the object from the array and store into variables to do the task.Once the task is completed I want to remove the object from the array. 

$file = Get-Content '\path\to\file' -Raw | ConvertFrom-Json 
$file.data | % {if($_.id -eq 'Caption'){ 
     $1 = $_.id 
     Write-Host $1 
     ###Here I want to remove the whole object related to the id 
    }} 
+2

'$ file.data = $ file.data | ? id -ne 'Caption'' – wOxxOm

Antwort

0

Ich denke, die Antwort in den Kommentaren, was Sie suchen: file.data = $file.data | ? id -ne 'Caption'.

Um dies zu erklären, verwendet es ?, was eigentlich ein Alias ​​(alternativer Name) für das Cmdlet Where-Object ist, was Sie verwenden, wenn Sie eine Sammlung basierend auf einigen Kriterien filtern möchten (sehr ähnlich zu WHERE Anweisung in SQL, wenn Sie vertraut sind).

Die obige Antwort ist eine kurze Version, können Sie alternativ sehen:

$file = Get-Content '\path\to\file' -Raw | ConvertFrom-Json 
$Result = $file.data | Where-Object {$_.id -ne 'Caption'} 

, die eine Script { } an das Cmdlet Where-Object und mit $_ ist vorbei jedes Element in der Pipeline darstellen, dann unter Verwendung von -ne als nicht gleich Vergleichsoperator, um festzustellen, ob die ID Eigenschaft dieses Objekts nicht mit der Zeichenfolge Caption übereinstimmt. Wenn dies als wahr ausgewertet wird, erlaubt es dem Element, die Pipeline zu passieren, was im obigen Beispiel bedeutet, dass es in der $Result-Variable endet. Wenn die Anweisung als false ausgewertet wird, wird das Element in der Sammlung verworfen und mit dem nächsten fortgefahren.

+0

Danke für die Erklärung. Ich bin in der Lage, das Objekt zu lesen und die Daten in den nächsten Schritten zu verwenden. Was ich will ist, wenn es verwendet wird und Prozess abgeschlossen Ich möchte dieses Objekt aus der Liste entfernen Bitte sag mir, wie ich es von der Liste entfernen kann. –

+0

Warum müssen Sie das tun? Was machst du danach mit der gefilterten Liste? Sie können das Cmdlet Where verwenden, um eine gefilterte Liste in einer Variablen zu erstellen und sie so zu verarbeiten, wie Sie derzeit sind. Hilft das? –

+0

Es ist ein temporärer Speicherort, an dem ich versuche, die Daten für einige Zeit zu halten und sie zu verwenden, wenn ich die nächste Anfrage erhalte. Nachdem die Anfrage beantwortet wurde, möchte ich die Array-Liste löschen, da sie nicht mehr benötigt wird. Bitte lassen Sie mich wissen, wenn etwas mit diesem Prozess nicht stimmt. –

Verwandte Themen