ConvertFrom-Json
Converteert een tekenreeks met JSON-indeling naar een aangepast object of een hash-tabel.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Met ConvertFrom-Json de cmdlet wordt een JSON-tekenreeks (JavaScript Object Notation) geconverteerd naar een aangepast PSCustomObject-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 JSON-standaard verbiedt het gebruik dat is verboden met een PSCustomObject. 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 deze cmdlet JSON met opmerkingen. Geaccepteerde opmerkingen worden gestart met twee slashes (//). De opmerking wordt niet weergegeven in de gegevens en kan in het bestand worden geschreven zonder de gegevens te beschadigen of een fout te genereren zoals in PowerShell 5.1.
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. 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 JsonFile.JSON | ConvertFrom-Json
De opdracht maakt gebruik van Get-Content cmdlet om de tekenreeksen op te halen in een JSON-bestand. Vervolgens wordt de pijplijnoperator gebruikt om de tekenreeks met scheidingstekens te verzenden naar de ConvertFrom-Json cmdlet, waarmee 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 verschillen in hoofdletters. Zonder de schakeloptie zou de opdracht een fout hebben gegenereerd.
Voorbeeld 5: Retour een matrix met één element
Met deze opdracht ziet u een voorbeeld waarin de -NoEnumerate schakeloptie wordt gebruikt om een JSON-matrix met één element terug te zetten.
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
Converteert de JSON naar een hash-tabelobject. Deze switch is geïntroduceerd in PowerShell 6.0. Er zijn verschillende scenario's waarin bepaalde beperkingen van de ConvertFrom-Json cmdlet kunnen worden opgelost.
- Als de JSON een lijst bevat met sleutels die alleen verschillen in behuizing. Zonder de schakeloptie zouden deze sleutels worden gezien als identieke sleutels en daarom zou alleen de laatste worden gebruikt.
- Als de JSON een sleutel bevat die een lege tekenreeks is. Zonder de schakeloptie zou de cmdlet een fout genereren omdat een
PSCustomObjecthash-tabel dat niet toestaat. Een voorbeeld van een gebruiksscenario waarin dit kan gebeuren, zijnproject.lock.jsonbestanden. - Hash-tabellen kunnen sneller worden verwerkt voor bepaalde gegevensstructuren.
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Hiermee haalt of stelt u de maximale diepte in die de JSON-invoer mag hebben. Standaard is dit 1024.
Deze parameter is geïntroduceerd in PowerShell 6.2.
| Type: | Int32 |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
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 |
| Accept pipeline input: | True |
| Accept wildcard characters: | False |
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 |
| Accept pipeline input: | False |
| Accept wildcard characters: | 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 ConvertTo-Json probeert u tekenreeksen te converteren die zijn opgemaakt als tijdstempels naar datum/tijdwaarden . De geconverteerde waarde is een [datetime] exemplaar met een Kind eigenschap die als volgt is ingesteld:
Unspecified, als er geen tijdzonegegevens in de invoertekenreeks staan.Utc, als de tijdzone-informatie een volgfaseZis.Local, als de tijdzone-informatie wordt gegeven als een gevolgde UTC-offset , zoals+02:00. De offset wordt correct geconverteerd naar de geconfigureerde tijdzone van de beller. De standaarduitvoeropmaak geeft niet de oorspronkelijke tijdzone-verschuiving aan.
Verwante koppelingen
Feedback
Feedback verzenden en weergeven voor