Delen via


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

De ConvertFrom-Json cmdlet converteert een tekenreeks met JSON-indeling (JavaScript Object Notation) 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 elke regel van de JSON-tekenreeks wordt verwerkt.

De JSON-standaard staat dubbele sleutelnamen toe, die niet zijn toegestaan in de typen PSObject en Hashtable . Als de JSON-tekenreeks bijvoorbeeld dubbele sleutels bevat, wordt alleen de laatste sleutel gebruikt door deze cmdlet. Zie andere voorbeelden hieronder.

Gebruik de ConvertTo-Json cmdlet om een JSON-tekenreeks te genereren op basis van een object.

Deze cmdlet is geïntroduceerd in PowerShell 3.0.

Notitie

Vanaf PowerShell 6 ondersteunt de cmdlet JSON met opmerkingen. JSON-opmerkingen beginnen met twee schuine streepjes (//). JSON-opmerkingen worden niet vastgelegd in de objecten die door de cmdlet worden uitgevoerd. Vóór PowerShell 6 ConvertFrom-Json zou een fout worden geretourneerd wanneer er een JSON-opmerking werd aangetroffen.

Voorbeelden

Voorbeeld 1: een DateTime-object converteren naar een JSON-object

Met deze opdracht worden de ConvertTo-Json cmdlets en ConvertFrom-Json gebruikt om een DateTime-object te converteren van de Get-Date cmdlet 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 object DateTime op te halen. De cmdlet wordt gebruikt ConvertTo-Json 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

Deze opdracht gebruikt de Invoke-WebRequest cmdlet 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 Get-Content cmdlet om de tekenreeksen in een JSON-bestand op te halen. De parameter Raw retourneert het hele bestand als één JSON-object. Vervolgens wordt de pijplijnoperator gebruikt om de tekenreeks met scheidingstekens te verzenden naar de ConvertFrom-Json cmdlet, die deze converteert naar een aangepast object.

Voorbeeld 4: een JSON-tekenreeks converteren naar een hash-tabel

Deze opdracht toont 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 verschillen in hoofdletters. Zonder de schakeloptie zou de opdracht een fout hebben gegenereerd.

Voorbeeld 5: Een matrix met één element afronden

Deze opdracht toont een voorbeeld waarin de -NoEnumerate schakeloptie wordt gebruikt om een JSON-matrix met één element af te ronden.

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. Als u zonder de switch de JSON converteert naar een PSObject en deze vervolgens weer converteert met de ConvertTo-Json opdracht, resulteert dit 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.

  • Wanneer twee of meer sleutels in een JSON-object zonder deze schakeloptie niet hoofdlettergevoelig identiek zijn, worden ze 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Depth

Hiermee wordt de maximale diepte opgehaald of ingesteld 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Hiermee geeft u de JSON-tekenreeksen 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 doorsnijden 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 van InputObject mag niet zijn $null.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoEnumerate

Hiermee geeft u op dat de uitvoer niet is geïnventariseerd.

Als u deze parameter instelt, worden matrices verzonden als één object in plaats van elk element afzonderlijk te verzenden. Dit garandeert dat JSON kan worden retourneerd via ConvertTo-Json.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

String

U kunt een JSON-tekenreeks doorsnijden naar ConvertFrom-Json.

Uitvoerwaarden

PSCustomObject

OrderedHashtable

Notities

Deze cmdlet wordt geïmplementeerd met behulp van Newtonsoft Json.NET.

Vanaf PowerShell 6 ConvertTo-Json wordt geprobeerd tekenreeksen die zijn opgemaakt als tijdstempels te converteren naar Datum/tijdwaarden . De geconverteerde waarde is een [datetime] exemplaar met een Kind eigenschap die als volgt is ingesteld:

  • Unspecified, als de invoertekenreeks geen tijdzone-informatie bevat.
  • Utcals de tijdzone-informatie een achtervolgende Zis.
  • Local, als de tijdzone-informatie wordt gegeven als een UTC-verschuiving die wordt gevolgd, zoals +02:00. De offset wordt correct geconverteerd naar de geconfigureerde tijdzone van de aanroeper. De standaarduitvoeropmaak geeft niet de oorspronkelijke tijdzone-verschuiving aan.

Het type PSObject handhaaft 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 OrderedHashtable behoudt die volgorde.