ConvertFrom-Json
Konvertiert eine JSON-formatierte Zeichenfolge in ein benutzerdefiniertes Objekt oder eine Hashtabelle.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Beschreibung
Das ConvertFrom-Json
Cmdlet konvertiert eine JSON-formatierte Zeichenfolge (JavaScript Object Notation) in ein benutzerdefiniertes PSCustomObject-Objekt , das über eine Eigenschaft für jedes Feld in der JSON-Zeichenfolge verfügt. JSON wird häufig von Websites verwendet, um eine Textdarstellung der Objekte bereitzustellen. Der JSON-Standard verbietet nicht die Verwendung, die mit einem PSCustomObject verboten ist. Wenn die JSON-Zeichenfolge beispielsweise doppelte Schlüssel enthält, wird nur der letzte Schlüssel von diesem Cmdlet verwendet. Weitere Beispiele finden Sie unten.
Verwenden Sie das ConvertTo-Json
Cmdlet, um eine JSON-Zeichenfolge aus einem beliebigen Objekt zu generieren.
Dieses Cmdlet wurde in PowerShell 3.0 eingeführt.
Hinweis
Ab PowerShell 6 unterstützt dieses Cmdlet JSON mit Kommentaren. Akzeptierte Kommentare werden mit zwei Schrägstrichen (//
) gestartet. Der Kommentar wird nicht in den Daten dargestellt und kann in die Datei geschrieben werden, ohne die Daten zu beschädigen oder einen Fehler wie in PowerShell 5.1 zu verursachen.
Beispiele
Beispiel 1: Konvertieren eines DateTime-Objekts in ein JSON-Objekt
Dieser Befehl verwendet die ConvertTo-Json
Cmdlets und ConvertFrom-Json
, um ein DateTime-Objekt aus dem Get-Date
Cmdlet in ein JSON-Objekt und dann in ein PSCustomObject zu konvertieren.
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
Im Beispiel wird das Select-Object
Cmdlet verwendet, um alle Eigenschaften des DateTime-Objekts abzurufen. Es verwendet das ConvertTo-Json
Cmdlet, um das DateTime-Objekt in eine Zeichenfolge zu konvertieren, die als JSON-Objekt formatiert ist, und das ConvertFrom-Json
Cmdlet, um die JSON-formatierte Zeichenfolge in ein PSCustomObject-Objekt zu konvertieren.
Beispiel 2: Abrufen von JSON-Zeichenfolgen aus einem Webdienst und Konvertieren in PowerShell-Objekte
Dieser Befehl verwendet das Invoke-WebRequest
Cmdlet, um JSON-Zeichenfolgen aus einem Webdienst abzurufen. Anschließend wird das ConvertFrom-Json
Cmdlet verwendet, um JSON-Inhalte in Objekte zu konvertieren, die in PowerShell verwaltet werden können.
# 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
Sie können auch das Invoke-RestMethod
Cmdlet verwenden, das JSON-Inhalte automatisch in Objekte konvertiert.
Beispiel 3: Konvertieren einer JSON-Zeichenfolge in ein benutzerdefiniertes Objekt
In diesem Beispiel wird gezeigt, wie Sie mithilfe des ConvertFrom-Json
Cmdlets eine JSON-Datei in ein benutzerdefiniertes PowerShell-Objekt konvertieren.
Get-Content JsonFile.JSON | ConvertFrom-Json
Der Befehl verwendet Get-Content Cmdlet, um die Zeichenfolgen in einer JSON-Datei abzurufen. Anschließend wird der Pipelineoperator verwendet, um die durch Trennzeichen getrennte Zeichenfolge an das ConvertFrom-Json
Cmdlet zu senden, das sie in ein benutzerdefiniertes Objekt konvertiert.
Beispiel 4: Konvertieren einer JSON-Zeichenfolge in eine Hashtabelle
Dieser Befehl zeigt ein Beispiel, in dem der -AsHashtable
Switch die Einschränkungen des Befehls überwinden kann.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
Die JSON-Zeichenfolge enthält zwei Schlüsselwertpaare mit Schlüsseln, die sich nur in der Groß- und Kleinschreibung unterscheiden. Ohne den Schalter hätte der Befehl einen Fehler ausgelöst.
Beispiel 5: Roundtrip für ein Array mit einem einzelnen Element
Dieser Befehl zeigt ein Beispiel, in dem der -NoEnumerate
Switch zum Roundtrip eines JSON-Arrays mit einem einzelnen Element verwendet wird.
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
Die JSON-Zeichenfolge enthält ein Array mit einem einzelnen Element. Ohne den Switch führt das Konvertieren des JSON-Objekts in ein PSObject und anschließendes Zurückkonvertieren mit dem ConvertTo-Json
Befehl zu einer einzelnen ganzzahligen Zahl.
Parameter
-AsHashtable
Konvertiert den JSON-Code in ein Hashtabellenobjekt. Dieser Switch wurde in PowerShell 6.0 eingeführt. Es gibt mehrere Szenarien, in denen einige Einschränkungen des ConvertFrom-Json
Cmdlets überwunden werden können.
- Wenn json eine Liste mit Schlüsseln enthält, die sich nur in der Groß- und Kleinschreibung unterscheiden. Ohne den Schalter würden diese Schlüssel als identische Schlüssel angesehen, und daher würde nur der letzte Schlüssel verwendet werden.
- Wenn der JSON-Code einen Schlüssel enthält, der eine leere Zeichenfolge ist. Ohne den Switch würde das Cmdlet einen Fehler auslösen, da ein
PSCustomObject
dies nicht zulässt, aber eine Hashtabelle. Ein Beispielanwendungsfall, in dem dies auftreten kann, sindproject.lock.json
Dateien. - Hashtabellen können für bestimmte Datenstrukturen schneller verarbeitet werden.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
Ruft die maximale Tiefe ab, die die JSON-Eingabe haben darf, oder legt diese fest. Standardmäßig ist es 1024.
Dieser Parameter wurde in PowerShell 6.2 eingeführt.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Gibt die JSON-Zeichenfolgen an, die in JSON-Objekte konvertiert werden sollen. Geben Sie eine Variable ein, die die Zeichenfolge enthält, oder geben Sie einen Befehl oder Ausdruck ein, der die Zeichenfolge abruft. Sie können auch eine Zeichenfolge an pipen ConvertFrom-Json
.
Der InputObject-Parameter ist erforderlich, sein Wert kann jedoch eine leere Zeichenfolge sein. Wenn das Eingabeobjekt eine leere Zeichenfolge ist, ConvertFrom-Json
generiert keine Ausgabe. Der InputObject-Wert darf nicht sein $null
.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
Gibt an, dass die Ausgabe nicht aufgelistet wird.
Durch Festlegen dieses Parameters werden Arrays als einzelnes Objekt gesendet, anstatt jedes Element separat zu senden. Dadurch wird sichergestellt, dass JSON über ConvertTo-Json
roundtripped werden kann.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können eine JSON-Zeichenfolge an übergeben ConvertFrom-Json
.
Ausgaben
PSCustomObject
Hinweise
Dieses Cmdlet wird mithilfe von Newtonsoft Json.NET implementiert.
Ab PowerShell 6 versucht, ConvertTo-Json
als Zeitstempel formatierte Zeichenfolgen in DateTime-Werte zu konvertieren. Der konvertierte Wert ist ein [datetime]
instance mit einer Kind
Wie folgt festgelegten Eigenschaft:
Unspecified
, wenn in der Eingabezeichenfolge keine Zeitzoneninformationen vorhanden sind.Utc
, wenn es sich bei den Zeitzoneninformationen um eine nachgestellteZ
handelt.Local
, wenn die Zeitzoneninformationen als nachgestellter UTC-Offset wie+02:00
angegeben werden. Der Offset wird ordnungsgemäß in die konfigurierte Zeitzone des Aufrufers konvertiert. Die Standardausgabeformatierung gibt nicht den ursprünglichen Zeitzonenoffset an.