ConvertFrom-Json
Konvertiert eine JSON-formatierte Zeichenfolge in ein benutzerdefiniertes Objekt oder eine Hashtabelle.
Syntax
Default (Standard)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Beschreibung
Das cmdlet ConvertFrom-Json konvertiert eine json-formatierte Zeichenfolge (JavaScript Object Notation) in eine benutzerdefinierte PSObject- oder Hashtable--Objekt, das über eine Eigenschaft für jedes Feld in der JSON-Zeichenfolge verfügt.
JSON wird häufig von Websites verwendet, um eine textbezogene Darstellung von Objekten bereitzustellen. Das Cmdlet fügt dem neuen Objekt die Eigenschaften hinzu, während jede Zeile der JSON-Zeichenfolge verarbeitet wird.
Der JSON-Standard ermöglicht doppelte Schlüsselnamen, die in PSObject- und Hashtable- Typen verboten sind. Wenn beispielsweise die JSON-Zeichenfolge doppelte Schlüssel enthält, wird nur der letzte Schlüssel von diesem Cmdlet verwendet. Weitere Beispiele finden Sie unten.
Verwenden Sie das Cmdlet ConvertTo-Json, 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 das Cmdlet JSON mit Kommentaren. JSON-Kommentare beginnen mit zwei Schrägstrichen (//). JSON-Kommentare werden nicht in den vom Cmdlet ausgegebenen Objekten erfasst. Vor PowerShell 6 wurde ein Fehler zurückgegeben, ConvertFrom-Json wenn ein JSON-Kommentar angezeigt wurde.
Beispiele
Beispiel 1: Konvertieren eines DateTime-Objekts in ein JSON-Objekt
Dieser Befehl verwendet die Cmdlets ConvertTo-Json und ConvertFrom-Json, um ein DateTime--Objekt aus dem Cmdlet Get-Date in ein JSON-Objekt zu konvertieren und dann in ein 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
Im Beispiel wird das cmdlet Select-Object verwendet, um alle Eigenschaften des DateTime--Objekts abzurufen. Es verwendet das Cmdlet ConvertTo-Json, um das DateTime--Objekt in eine Zeichenfolge zu konvertieren, die als JSON-Objekt formatiert ist, und das cmdlet ConvertFrom-Json, 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 Cmdlet Invoke-WebRequest zum Abrufen von JSON-Zeichenfolgen aus einem Webdienst und verwendet dann das Cmdlet ConvertFrom-Json zum Konvertieren von JSON-Inhalten in Objekte, 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 Cmdlet Invoke-RestMethod 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 das cmdlet ConvertFrom-Json verwenden, um eine JSON-Datei in ein benutzerdefiniertes PowerShell-Objekt zu konvertieren.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
Der Befehl verwendet Get-Content Cmdlet, um die Zeichenfolgen in einer JSON-Datei abzurufen. Der parameter Raw gibt die gesamte Datei als einzelnes JSON-Objekt zurück. Anschließend wird der Pipelineoperator verwendet, um die durch Trennzeichen getrennte Zeichenfolge an das Cmdlet ConvertFrom-Json 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 Schalter -AsHashtable Einschränkungen des Befehls überwinden kann.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
Die JSON-Zeichenfolge enthält zwei Schlüssel-Wert-Paare mit Schlüsseln, die sich nur bei der Groß-/Kleinschreibung unterscheiden. Ohne den Schalter hätte der Befehl einen Fehler ausgelöst.
Beispiel 5: Abrundung eines Arrays mit einem einzigen Element
Dieser Befehl zeigt ein Beispiel, in dem der Schalter -NoEnumerate verwendet wird, um ein einzelnes JSON-Element-Array hin- und zurückzuwandeln.
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 Schalter wird der JSON-Code in ein PSObject umgewandelt und dann mit dem ConvertTo-Json-Befehl zurück in eine einzelne Ganzzahl konvertiert.
Parameter
-AsHashtable
Konvertiert den JSON-Code in ein Hashtabellenobjekt. Dieser Switch wurde in PowerShell 6.0 eingeführt. Ab PowerShell 7.3 ist das Objekt eine OrderedHashtable- und behält die Reihenfolge der Schlüssel aus dem JSON-Code bei. In früheren Versionen ist das Objekt eine Hashtable.
Es gibt mehrere Szenarien, in denen einige Einschränkungen des cmdlets ConvertFrom-Json überwunden werden können.
- Ohne diesen Schalter werden zwei oder mehr Schlüssel in einem JSON-Objekt, die nur hinsichtlich der Groß- und Kleinschreibung identisch sind, als identische Schlüssel behandelt. In diesem Fall wird nur der letzte dieser case-insensitiv identischen Schlüssel in das konvertierte Objekt aufgenommen.
- Ohne diesen Schalter löst das Cmdlet einen Fehler aus, wenn der JSON-Code einen Schlüssel enthält, der eine leere Zeichenfolge ist.
PSCustomObject- darf keine Eigenschaftsnamen haben, die leere Zeichenfolgen sind. Dies kann beispielsweise in
project.lock.jsonDateien auftreten. - Hashtabellen können für bestimmte Datenstrukturen schneller verarbeitet werden.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Depth
Ruft die maximale Tiefe ab, über die die JSON-Eingabe verfügen darf, oder legt sie fest. Der Standardwert ist 1024.
Dieser Parameter wurde in PowerShell 6.2 eingeführt.
Parametereigenschaften
| Typ: | Int32 |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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 eine Zeichenfolge auch an ConvertFrom-Json weiterleiten.
Der InputObject Parameter ist erforderlich, der Wert kann jedoch eine leere Zeichenfolge sein. Wenn das Eingabeobjekt eine leere Zeichenfolge ist, generiert ConvertFrom-Json keine Ausgabe. Der Wert InputObject kann nicht $nullwerden.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | 0 |
| Obligatorisch: | True |
| Wert aus Pipeline: | True |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-NoEnumerate
Gibt an, dass die Ausgabe nicht aufgezählt wird.
Wenn Sie diesen Parameter festlegen, werden Arrays als einzelnes Objekt gesendet, anstatt jedes Element separat zu senden. Dies garantiert, dass JSON einen Round-Trip über ConvertTo-Json durchführen kann.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
String
Sie können eine JSON-Zeichenfolge an ConvertFrom-Jsonübergeben.
Ausgaben
PSCustomObject
OrderedHashtable
Hinweise
Dieses Cmdlet wird mit Newtonsoft Json.NETimplementiert.
Ab PowerShell 6 versucht ConvertTo-Json, Zeichenfolgen, die als Zeitstempel formatiert sind, in DateTime--Werte zu konvertieren. Der konvertierte Wert ist eine [datetime] Instanz mit einem Kind Eigenschaftensatz wie folgt:
-
Unspecified, wenn in der Eingabezeichenfolge keine Zeitzoneninformationen vorhanden sind. -
Utc, wenn die Zeitzoneninformation ein nachgestelltesZist. -
Local, wenn die Zeitzoneninformation als nachgestellter UTC Offset wie+02:00angegeben wird. Der Offset wird korrekt in die vom Aufrufer konfigurierte Zeitzone umgewandelt. Die Standardmäßige Ausgabeformatierung gibt nicht den ursprünglichen Zeitzonenoffset an.
Der PSObject- Typ behält die Reihenfolge der Eigenschaften bei, wie in der JSON-Zeichenfolge dargestellt. Ab PowerShell 7.3 erstellt der Parameter AsHashtable eine OrderedHashtable. Die Schlüssel-Wert-Paare werden in der Reihenfolge hinzugefügt, die in der JSON-Zeichenfolge dargestellt wird. Die OrderedHashtable bewahrt diese Reihenfolge.