Durchlaufen Sie eine JSON-Datei in PowerShell

  1. PowerShell-Schleife durch JSON
  2. Verwenden Sie ConvertFrom-Json
  3. Verwenden Sie Objekt deserialisieren
Durchlaufen Sie eine JSON-Datei in PowerShell

Das Hauptziel dieses Artikels besteht darin, zu demonstrieren, wie eine JSON-Datei in PowerShell-Skripts in Schleifen und Iterationen durchlaufen wird.

PowerShell-Schleife durch JSON

Beim Umgang mit JSON-Objekten beim Skripting in PowerShell kann es vorkommen, dass man für den Zugriff auf eine bestimmte Eigenschaft iterieren möchte.

Betrachten Sie das folgende JSON-Objekt:

[
{
  "id": 1,
  "first_name": "Twila",
  "last_name": "Witcherley",
  "email": "twitcherley0@issuu.com",
  "gender": "Female",
  "ip_address": "129.230.255.192"
}, {
  "id": 2,
  "first_name": "Rafaelita",
  "last_name": "Fearnehough",
  "email": "rfearnehough1@nsw.gov.au",
  "gender": "Polygender",
  "ip_address": "247.204.187.100"
}, {
  "id": 3,
  "first_name": "Eimile",
  "last_name": "Denyer",
  "email": "edenyer2@nps.gov",
  "gender": "Female",
  "ip_address": "125.244.213.155"
}, {
  "id": 4,
  "first_name": "Sly",
  "last_name": "Conman",
  "email": "sconman3@meetup.com",
  "gender": "Polygender",
  "ip_address": "194.50.217.42"
}, {
  "id": 5,
  "first_name": "Augustine",
  "last_name": "Ciccotti",
  "email": "aciccotti4@google.ca",
  "gender": "Male",
  "ip_address": "192.158.101.100"
}
]

Im Zusammenhang mit dem oben erwähnten JSON kann es erforderlich sein, auf id, first_name, last_name, email, gender und ip_address zuzugreifen.

Verwenden Sie ConvertFrom-Json

Die Lösung kann auf zwei Arten gelöst werden, hauptsächlich basierend auf der Version von PowerShell.

Betrachten Sie den folgenden Ausschnitt:

$j =
@'
[{"id":1,"first_name":"Twila","last_name":"Witcherley","email":"twitcherley0@issuu.com","gender":"Female","ip_address":"129.230.255.192"},{"id":2,"first_name":"Rafaelita","last_name":"Fearnehough","email":"rfearnehough1@nsw.gov.au","gender":"Polygender","ip_address":"247.204.187.100"},{"id":3,"first_name":"Eimile","last_name":"Denyer","email":"edenyer2@nps.gov","gender":"Female","ip_address":"125.244.213.155"},{"id":4,"first_name":"Sly","last_name":"Conman","email":"sconman3@meetup.com","gender":"Polygender","ip_address":"194.50.217.42"},{"id":5,"first_name":"Augustine","last_name":"Ciccotti","email":"aciccotti4@google.ca","gender":"Male","ip_address":"192.158.101.100"}]
'@

foreach ($record in ($j | ConvertFrom-Json))
{
        write-host "$($record.id) | $($record.first_name) | $($record.last_name) | $($record.email) | $($record.gender) | $($record.ip_address)"
}

Was die folgende Ausgabe ergibt:

1 | Twila | Witcherley | twitcherley0@issuu.com | Female | 129.230.255.192
2 | Rafaelita | Fearnehough | rfearnehough1@nsw.gov.au | Polygender | 247.204.187.100
3 | Eimile | Denyer | edenyer2@nps.gov | Female | 125.244.213.155
4 | Sly | Conman | sconman3@meetup.com | Polygender | 194.50.217.42
5 | Augustine | Ciccotti | aciccotti4@google.ca | Male | 192.158.101.100

Wir können das Cmdlet ConvertFrom-Json verwenden, um einen JSON-String in eine PowerShell-Datenstruktur zu konvertieren.

Der Grund für die Verwendung von ConvertFrom-JSON ist, dass PowerShell das Iterieren über JSON-Objekte nicht unterstützt, ohne sie vorher in etwas Passendes zu konvertieren. In diesem Fall wird ConvertFrom-Json verwendet, um den JSON-String in ein PSCustomObject zu konvertieren, wobei jede seiner Eigenschaften ein JSON-Feld darstellt.

Verwenden Sie Objekt deserialisieren

Betrachten Sie den folgenden Ausschnitt:

Add-Type -AssemblyName System.Web.Extensions
$JS = New-Object System.Web.Script.Serialization.JavaScriptSerializer

$j =
@'
[{"id":1,"first_name":"Twila","last_name":"Witcherley","email":"twitcherley0@issuu.com","gender":"Female","ip_address":"129.230.255.192"},{"id":2,"first_name":"Rafaelita","last_name":"Fearnehough","email":"rfearnehough1@nsw.gov.au","gender":"Polygender","ip_address":"247.204.187.100"},{"id":3,"first_name":"Eimile","last_name":"Denyer","email":"edenyer2@nps.gov","gender":"Female","ip_address":"125.244.213.155"},{"id":4,"first_name":"Sly","last_name":"Conman","email":"sconman3@meetup.com","gender":"Polygender","ip_address":"194.50.217.42"},{"id":5,"first_name":"Augustine","last_name":"Ciccotti","email":"aciccotti4@google.ca","gender":"Male","ip_address":"192.158.101.100"}]
'@

$data = $JS.DeserializeObject($j)

$data.GetEnumerator() | foreach-Object {
    foreach ($key in $_.Keys)
	{
		Write-Host "$key : $($_[$key])"
	}
}

Ausgang:

id : 1
first_name : Twila
last_name : Witcherley
email : twitcherley0@issuu.com
gender : Female
ip_address : 129.230.255.192
id : 2
first_name : Rafaelita
last_name : Fearnehough
email : rfearnehough1@nsw.gov.au
gender : Polygender
ip_address : 247.204.187.100
id : 3
first_name : Eimile
last_name : Denyer
email : edenyer2@nps.gov
gender : Female
ip_address : 125.244.213.155
id : 4
first_name : Sly
last_name : Conman
email : sconman3@meetup.com
gender : Polygender
ip_address : 194.50.217.42
id : 5
first_name : Augustine
last_name : Ciccotti
email : aciccotti4@google.ca
gender : Male
ip_address : 192.158.101.100

Um dieses Problem zu lösen, können wir den .NET JavaScriptSerializer verwenden, um unsere JSON-Datei zu verarbeiten. Da der JavaScriptSerializer ein Dictionary zurückliefert, ist die Iteration mit den Methoden GetEnumerator() und foreach-Object relativ einfach.

Denken Sie daran, dass PowerShell 2.0 und .NET Framework 2 - 4.8 erforderlich sind, um auf die DLL System.Web.UI.WebResourceAttribute zu verweisen.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Verwandter Artikel - PowerShell JSON