ConvertFrom-Json
Converteert een tekenreeks met JSON-indeling naar een aangepast object of een hash-tabel.
Syntaxis
Default (Standaard)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Met de cmdlet ConvertFrom-Json
wordt een tekenreeks met JSON-indeling (JavaScript Object Notation) geconverteerd naar een aangepaste 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 niet zijn toegestaan 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 cmdlet ConvertTo-Json
.
Deze cmdlet is geïntroduceerd in PowerShell 3.0.
Opmerking
In Windows PowerShell 5.1 retourneerde ConvertFrom-Json
een fout wanneer het op een JSON-opmerking stuitte. In PowerShell 6 en hoger ondersteunt de cmdlet JSON met opmerkingen. JSON-opmerkingen worden niet vastgelegd in de objecten die door de cmdlet worden uitgevoerd. Zie de JSON-opmerkingen sectie van het about_Comments artikel voor meer informatie.
Voorbeelden
Voorbeeld 1: Een DateTime-object converteren naar een JSON-object
Met deze opdracht worden de cmdlets ConvertTo-Json
en ConvertFrom-Json
gebruikt om een DateTime--object van de cmdlet Get-Date
te converteren naar een JSON-object en vervolgens naar een PSCustomObject.
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Monday, January 29, 2024 3:10:26 PM
Date : 1/29/2024 12:00:00 AM
Day : 29
DayOfWeek : 1
DayOfYear : 29
Hour : 15
Kind : 2
Millisecond : 931
Microsecond : 47
Nanosecond : 600
Minute : 10
Month : 1
Second : 26
Ticks : 638421378269310476
TimeOfDay : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year : 2024
In het voorbeeld wordt de cmdlet Select-Object
gebruikt om alle eigenschappen van het DateTime--object op te halen. De cmdlet ConvertTo-Json
wordt gebruikt 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. Vervolgens wordt de cmdlet ConvertFrom-Json
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 gebruikt Get-Content cmdlet om de tekenreeksen op te halen in een JSON-bestand. De parameter Raw retourneert het hele bestand als één JSON-object. Vervolgens gebruikt men de pipeline-operator om de gescheiden tekenreeks naar de ConvertFrom-Json
-cmdlet te verzenden, die het naar een aangepast object converteert.
Voorbeeld 4: Een JSON-tekenreeks converteren naar een hash-tabel
Met deze opdracht ziet u een voorbeeld waarin de -AsHashtable
switch beperkingen van de opdracht kan overwinnen.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
De JSON-tekenreeks bevat twee sleutelwaardeparen met sleutels die alleen in behuizing verschillen. Zonder de switch zou de opdracht een fout hebben opgeleverd.
Voorbeeld 5: Een matrix met één element afronden
Met dit commando ziet u een voorbeeld waarin de -NoEnumerate
-switch wordt gebruikt om een JSON-array met één element rond te sturen.
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 switch converteert u de JSON naar een PSObject, en als u deze dan weer converteert met de ConvertTo-Json
-opdracht, resulteert dat 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 OrderedHashtable 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, die hoofdletterongevoelig identiek zijn, als identieke sleutels behandeld. In dat geval wordt alleen de laatste van deze hoofdletterongevoelige 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.
Parametereigenschappen
Type: | SwitchParameter |
Default value: | False |
Ondersteunt jokertekens: | False |
DontShow: | False |
Parametersets
(All)
Position: | Named |
Verplicht: | False |
Waarde uit pijplijn: | False |
Waarde uit pijplijn op eigenschapsnaam: | False |
Waarde van resterende argumenten: | False |
-DateKind
Hiermee geeft u de methode op die wordt gebruikt bij het parseren van datum/tijd-waarden in de JSON-tekenreeks. De acceptabele waarden voor deze parameter zijn:
Default
Local
Utc
Offset
String
Zie de details in de NOTES-voor informatie over hoe deze waarden van invloed zijn op de conversie.
Deze parameter is geïntroduceerd in PowerShell 7.5.
Parametereigenschappen
Type: | Microsoft.PowerShell.Commands.JsonDateKind |
Default value: | Default |
Geaccepteerde waarden: | Default, Local, Utc, Offset, String |
Ondersteunt jokertekens: | False |
DontShow: | False |
Parametersets
(All)
Position: | Named |
Verplicht: | False |
Waarde uit pijplijn: | False |
Waarde uit pijplijn op eigenschapsnaam: | False |
Waarde van resterende argumenten: | False |
-Depth
Haalt de maximale diepte op die de JSON-invoer mag hebben, of stelt deze in. De standaardwaarde is 1024.
Deze parameter is geïntroduceerd in PowerShell 6.2.
Parametereigenschappen
Type: | Int32 |
Default value: | None |
Ondersteunt jokertekens: | False |
DontShow: | False |
Parametersets
(All)
Position: | Named |
Verplicht: | False |
Waarde uit pijplijn: | False |
Waarde uit pijplijn op eigenschapsnaam: | False |
Waarde van resterende argumenten: | 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 doorspezen naar ConvertFrom-Json
.
De parameter InputObject is vereist, maar de waarde kan een lege tekenreeks zijn. Wanneer het invoerobject een lege tekenreeks is, genereert ConvertFrom-Json
geen uitvoer. De InputObject waarde kan niet worden $null
.
Parametereigenschappen
Type: | String |
Default value: | None |
Ondersteunt jokertekens: | False |
DontShow: | False |
Parametersets
(All)
Position: | 0 |
Verplicht: | True |
Waarde uit pijplijn: | True |
Waarde uit pijplijn op eigenschapsnaam: | False |
Waarde van resterende argumenten: | 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 heen-en-weer kan worden verwerkt via ConvertTo-Json
.
Parametereigenschappen
Type: | SwitchParameter |
Default value: | False |
Ondersteunt jokertekens: | False |
DontShow: | False |
Parametersets
(All)
Position: | Named |
Verplicht: | False |
Waarde uit pijplijn: | False |
Waarde uit pijplijn op eigenschapsnaam: | False |
Waarde van resterende argumenten: | False |
CommonParameters
Deze cmdlet ondersteunt de algemene parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction en -WarningVariable. Zie about_CommonParametersvoor meer informatie.
Invoerwaarden
String
U kunt een JSON-tekenreeks doorsluisen naar ConvertFrom-Json
.
Uitvoerwaarden
PSCustomObject
OrderedHashtable
Notities
Deze cmdlet wordt geïmplementeerd met behulp van Newtonsoft Json.NET.
Vanaf PowerShell 6 probeert ConvertTo-Json
tekenreeksen die zijn opgemaakt als tijdstempels te converteren naar Datum/tijd- waarden.
PowerShell 7.5 heeft de parameter DateKind toegevoegd, waarmee u kunt bepalen hoe de tijdstempeltekenreeks wordt geconverteerd. De parameter accepteert de volgende waarden:
-
Default
: converteert de tijdstempel naar een[datetime]
exemplaar volgens de volgende regels:- Als de invoertekenreeks geen tijdzonegegevens bevat, wordt de waarde door de Json.NET serializer geconverteerd als een niet-opgegeven tijdwaarde.
- Als de tijdzone-informatie een afsluitende
Z
is, converteert de Json.NET serializer de tijdstempel naar een UTC- waarde. - Als de tijdstempel een UTC-offset bevat zoals
+02:00
, wordt de offset geconverteerd naar de geconfigureerde tijdzone van de aanroeper. De standaarduitvoeropmaak geeft niet de oorspronkelijke tijdzoneverschil aan.
-
Local
- converteert de tijdstempel naar een[datetime]
instantie in de lokale tijdzone van. Als de tijdstempel een UTC-offset bevat, wordt de offset geconverteerd naar de geconfigureerde tijdzone van de aanroeper. De standaarduitvoeropmaak geeft niet de oorspronkelijke tijdzoneverschil aan. -
Utc
: converteert de waarde naar een[datetime]
exemplaar in UTC-tijd. -
Offset
: converteert de tijdstempel naar een[DateTimeOffset]
instantie waarbij de tijdzoneverschuiving van de oorspronkelijke tekenreeks in die instantie behouden blijft. Als de onbewerkte tekenreeks geen tijdzoneverschil bevat, wordt de DateTimeOffset waarde opgegeven in de lokale tijdzone. -
String
: behoudt de waarde van de[string]
-instantie. Dit zorgt ervoor dat aangepaste parseringslogica kan worden toegepast op de onbewerkte tekenreekswaarde.
Het PSObject- type behoudt de volgorde van de eigenschappen zoals weergegeven in de JSON-tekenreeks. Vanaf PowerShell 7.3 creëert de parameter AsHashtable een OrderedHashtable. De sleutel-waardeparen worden toegevoegd in de volgorde die wordt weergegeven in de JSON-tekenreeks. De OrderedHashtable behoudt die volgorde.