ConvertFrom-Json
Converteert een tekenreeks met JSON-indeling naar een aangepast object of een hash-tabel.
Syntaxis
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Met de ConvertFrom-Json
cmdlet wordt een tekenreeks met JSON-indeling (JavaScript Object Notation) geconverteerd naar een aangepast PSObject - of Hashtable-object met een eigenschap voor elk veld in de JSON-tekenreeks.
JSON wordt vaak gebruikt door websites om een tekstuele weergave van objecten te bieden. De cmdlet voegt de eigenschappen toe aan het nieuwe object terwijl deze elke regel van de JSON-tekenreeks verwerkt.
De JSON-standaard staat dubbele sleutelnamen toe, die zijn verboden in PSObject - en Hashtable-typen . Als de JSON-tekenreeks bijvoorbeeld dubbele sleutels bevat, wordt alleen de laatste sleutel gebruikt door deze cmdlet. Zie andere voorbeelden hieronder.
Als u een JSON-tekenreeks wilt genereren op basis van een object, gebruikt u de ConvertTo-Json
cmdlet.
Deze cmdlet is geïntroduceerd in PowerShell 3.0.
Notitie
Vanaf PowerShell 6 ondersteunt de cmdlet JSON met opmerkingen. JSON-opmerkingen beginnen met twee slashes (//
) tekens. JSON-opmerkingen worden niet vastgelegd in de objecten die door de cmdlet worden uitgevoerd. Vóór PowerShell 6 ConvertFrom-Json
zou er een fout worden geretourneerd bij het aangetroffen van een JSON-opmerking.
Voorbeelden
Voorbeeld 1: Een DateTime-object converteren naar een JSON-object
Met deze opdracht worden de ConvertTo-Json
en ConvertFrom-Json
cmdlets gebruikt om een DateTime-object van de Get-Date
cmdlet te converteren naar een JSON-object en vervolgens naar een PSCustomObject.
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Friday, January 13, 2012 8:06:31 PM
Date : 1/13/2012 8:00:00 AM
Day : 13
DayOfWeek : 5
DayOfYear : 13
Hour : 20
Kind : 2
Millisecond : 400
Minute : 6
Month : 1
Second : 31
Ticks : 634620819914009002
TimeOfDay : @{Ticks=723914009002; Days=0; Hours=20; Milliseconds=400; Minutes=6; Seconds=31; TotalDays=0.83786343634490734; TotalHours=20.108722472277776; TotalMilliseconds=72391400.900200009; TotalMinutes=1206.5233483366667;TotalSeconds=72391.4009002}
Year : 2012
In het voorbeeld wordt de Select-Object
cmdlet gebruikt om alle eigenschappen van het DateTime-object op te halen. De cmdlet gebruikt de ConvertTo-Json
cmdlet om het DateTime-object te converteren naar een tekenreeks die is opgemaakt als een JSON-object en de ConvertFrom-Json
cmdlet om de tekenreeks met JSON-indeling te converteren naar een PSCustomObject-object .
Voorbeeld 2: JSON-tekenreeksen ophalen uit een webservice en deze converteren naar PowerShell-objecten
Met deze opdracht wordt de Invoke-WebRequest
cmdlet gebruikt om JSON-tekenreeksen op te halen uit een webservice en vervolgens wordt de ConvertFrom-Json
cmdlet gebruikt om JSON-inhoud te converteren naar objecten die kunnen worden beheerd in PowerShell.
# Ensures that Invoke-WebRequest uses TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$j = Invoke-WebRequest 'https://api.github.com/repos/PowerShell/PowerShell/issues' | ConvertFrom-Json
U kunt ook de Invoke-RestMethod
cmdlet gebruiken, waarmee JSON-inhoud automatisch wordt geconverteerd naar objecten.
Voorbeeld 3: Een JSON-tekenreeks converteren naar een aangepast object
In dit voorbeeld ziet u hoe u de ConvertFrom-Json
cmdlet gebruikt om een JSON-bestand te converteren naar een aangepast PowerShell-object.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
De opdracht maakt gebruik van de cmdlet Get-Content om de tekenreeksen op te halen in een JSON-bestand. De parameter Raw retourneert het hele bestand als één JSON-object. Vervolgens wordt de pijplijnoperator gebruikt om de tekenreeks met scheidingstekens naar de ConvertFrom-Json
cmdlet te verzenden, waardoor deze wordt geconverteerd naar een aangepast object.
Voorbeeld 4: Een JSON-tekenreeks converteren naar een hash-tabel
Met deze opdracht ziet u een voorbeeld waarin de -AsHashtable
schakeloptie beperkingen van de opdracht kan overwinnen.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
De JSON-tekenreeks bevat twee sleutelwaardeparen met sleutels die alleen in hoofdletters verschillen. Zonder de schakeloptie zou de opdracht een fout hebben gegenereerd.
Voorbeeld 5: Een matrix met één element afronden
Met deze opdracht ziet u een voorbeeld waarin de -NoEnumerate
schakeloptie wordt gebruikt om een JSON-matrix met één element te afronden.
Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate | ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json | ConvertTo-Json -Compress)"
With -NoEnumerate: [1]
Without -NoEnumerate: 1
De JSON-tekenreeks bevat een matrix met één element. Zonder de schakeloptie converteert u de JSON naar een PSObject en converteert u deze vervolgens terug met de ConvertTo-Json
opdrachtresultaten in één geheel getal.
Parameters
-AsHashtable
Converteert de JSON naar een hash-tabelobject. Deze switch is geïntroduceerd in PowerShell 6.0. Vanaf PowerShell 7.3 is het object een OrderHashtable en blijft de volgorde van de sleutels van de JSON behouden. In eerdere versies is het object een Hashtable.
Er zijn verschillende scenario's waarin bepaalde beperkingen van de ConvertFrom-Json
cmdlet kunnen worden opgelost.
- Zonder deze schakeloptie worden twee of meer sleutels in een JSON-object hoofdlettergevoelig identiek behandeld als identieke sleutels. In dat geval wordt alleen de laatste van deze hoofdlettergevoelige identieke sleutels opgenomen in het geconverteerde object.
- Zonder deze schakeloptie genereert de cmdlet een fout wanneer de JSON een sleutel bevat die een lege tekenreeks is. PSCustomObject kan geen eigenschapsnamen hebben die lege tekenreeksen zijn. Dit kan bijvoorbeeld gebeuren in
project.lock.json
bestanden. - Hash-tabellen kunnen sneller worden verwerkt voor bepaalde gegevensstructuren.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Depth
Hiermee haalt u de maximale diepte op die de JSON-invoer mag hebben. De standaardwaarde is 1024.
Deze parameter is geïntroduceerd in PowerShell 6.2.
Type: | Int32 |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-InputObject
Hiermee geeft u de JSON-tekenreeksen op die moeten worden geconverteerd naar JSON-objecten. Voer een variabele in die de tekenreeks bevat of typ een opdracht of expressie die de tekenreeks ophaalt. U kunt ook een tekenreeks doorsluisen naar ConvertFrom-Json
.
De parameter InputObject is vereist, maar de waarde kan een lege tekenreeks zijn. Wanneer het invoerobject een lege tekenreeks is, ConvertFrom-Json
wordt er geen uitvoer gegenereerd. De waarde InputObject kan niet zijn $null
.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-NoEnumerate
Hiermee geeft u op dat de uitvoer niet is geïnventariseerd.
Als u deze parameter instelt, worden matrices als één object verzonden in plaats van elk element afzonderlijk te verzenden. Dit garandeert dat JSON kan worden afgerond via ConvertTo-Json
.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt een JSON-tekenreeks doorsluisen naar ConvertFrom-Json
.
Uitvoerwaarden
PSCustomObject
Notities
Deze cmdlet wordt geïmplementeerd met Newtonsoft Json.NET.
Vanaf PowerShell 6 probeert ConvertTo-Json
u tekenreeksen te converteren die zijn opgemaakt als tijdstempels naar Datum/tijdswaarden . De geconverteerde waarde is een [datetime]
exemplaar met een Kind
eigenschap die als volgt is ingesteld:
Unspecified
, als er geen tijdzone-informatie in de invoertekenreeks is.Utc
, als de tijdzone-informatie een volgtijdZ
is .Local
, als de tijdzone-informatie wordt gegeven als een afsluitende UTC-offset zoals+02:00
. De offset wordt correct geconverteerd naar de geconfigureerde tijdzone van de beller. De standaarduitvoeropmaak geeft niet de oorspronkelijke tijdzoneverschil aan.
Het type PSObject behoudt de volgorde van de eigenschappen zoals weergegeven in de JSON-tekenreeks. Vanaf PowerShell 7.3 maakt de parameter AsHashtable een OrderedHashtable. De sleutel-waardeparen worden toegevoegd in de volgorde die wordt weergegeven in de JSON-tekenreeks. De OrderHashtable behoudt die volgorde.