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.
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