Hoe lees, wijzig en parseer je JSON-objecten met PowerShell?

JSON is zo’n beetje het standaard tekstformaat voor het werken met datastructuren die gemakkelijk te lezen en te verzenden zijn. Als je PowerShell gebruikt, zijn er twee belangrijke cmdlets die je moet onthouden: `json.json` ConvertFrom-Jsonen ` ConvertTo-Jsonjson.json`.Ze zijn erg handig voor het maken, lezen, wijzigen en zelfs opslaan van JSON-gegevens in een bestand. Het klinkt misschien vreemd, maar als je het eenmaal door hebt, is het vrij eenvoudig.

Gegevens in JSON bestaan ​​uit sleutel-waardeparen, en ja, je kunt elementen in elkaar nesten. Stel dat je JSON-gegevens wilt maken en ergens wilt opslaan, dan begin je met het maken van een PowerShell-object. Bijvoorbeeld:

$obj = @{ Name = "Henry" Roles = @{ AD = "Admin" SQL = "Report" } "Company" = "woshub" } 

Dit is in feite een mini-database in PowerShell. Converteer dit object vervolgens naar JSON en sla het op in een bestand op je schijf.

$json = $obj | ConvertTo-Json Set-Content -Path C:\PS\userroles.json -Value $json 

Het is belangrijk om de dingen in de juiste volgorde te doen. Het lijkt erop dat het codefragment dat je eerder had, de commando’s op een vreemde manier combineerde. Op de ene configuratie werkte het, op de andere… niet zo goed. Voer dus altijd eerst de conversie uit en schrijf daarna pas naar het bestand. Bovendien bevat het commando dat je deelde een typefout; het zou moeten zijn:

$json = $obj | ConvertTo-Json Set-Content -Path C:\PS\userroles.json -Value $json 

Als je die JSON-gegevens nu weer in PowerShell wilt inlezen, doe je het volgende:

$json = Get-Content -Path C:\PS\userroles.json -Raw | ConvertFrom-Json 

Het bewerken van JSON-eigenschappen is vrij eenvoudig. U kunt alle eigenschappen opsommen met:

$json | Format-List 

Of, als u de waarde van een specifieke eigenschap wilt weten, bijvoorbeeld de SQL-rol, doet u het volgende:

$json. Roles. SQL 

Als je een nieuwe eigenschap wilt toevoegen, bijvoorbeeld een e-mailadres, kun je Add-Member gebruiken. Houd er wel rekening mee dat de syntaxis soms wat ingewikkeld kan zijn, vooral bij complexe objecten. Voorbeeld:

$json | Add-Member -MemberType NoteProperty -Name "Email" -Value "[email protected]"

Let op: vergeet niet dat PowerShell-objecten en JSON niet exact hetzelfde zijn. Soms moet je dingen heen en weer converteren. Als je bijvoorbeeld een eigenschap wijzigt, wil je het volgende doen:

$json. Roles. SQL = 'Admin' $json | ConvertTo-Json | Set-Content -Path C:\PS\userroles.json 

Om een ​​eigenschap zoals ‘E-mail’ te verwijderen, doet u het volgende:

$json. PSObject. Properties. Remove("Email") 

Als je gegevens ophaalt van een web-API die JSON retourneert, is de cmdlet Invoke-WebRequest je beste vriend. Om bijvoorbeeld de DNS-resultaten van Google naar JSON om te zetten, doe je het volgende:

$site = "woshub.com" $rawresp = Invoke-WebRequest "https://dns.google/resolve?name=$site&type=A" $rawjson = ConvertFrom-Json -InputObject $rawresp. Content $dnsAnswers = $rawjson. Answer. Data 

Al deze dingen zijn behoorlijk krachtig als je er eenmaal gevoel voor hebt, maar ja, het kan een beetje lastig zijn, vooral met geneste objecten of vreemde dataformaten. Houd het in het begin gewoon simpel en wees niet bang om te experimenteren.