Freigeben über


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 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 Textdarstellung der Objekte bereitzustellen. Das Cmdlet fügt die Eigenschaften dem neuen Objekt hinzu, während es jede Zeile der JSON-Zeichenfolge verarbeitet.

Der JSON-Standard erlaubt doppelte Schlüsselnamen, die in PSObject - und Hashtable-Typen verboten sind. Wenn die JSON-Zeichenfolge beispielsweise doppelte Schlüssel enthält, wird von diesem Cmdlet nur der letzte Schlüssel 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 das Cmdlet JSON mit Kommentaren. JSON-Kommentare beginnen mit zwei Schrägstrichen (//). JSON-Kommentare werden in den vom Cmdlet ausgegebenen Objekten nicht erfasst. Vor PowerShell 6 gibt einen Fehler zurück, ConvertFrom-Json wenn ein JSON-Kommentar aufgetreten ist.

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-Objekt 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 das ConvertFrom-Json Cmdlet 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 Raw-Parameter gibt die gesamte Datei als einzelnes JSON-Objekt zurück. 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 Schalter 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 eines Arrays 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 Schalter 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. Ab PowerShell 7.3 ist das Objekt ein OrderedHashtable-Objekt und behält die Reihenfolge der Schlüssel aus dem JSON-Code bei. In früheren Versionen ist das Objekt eine Hashtabelle.

Es gibt mehrere Szenarien, in denen einige Einschränkungen des ConvertFrom-Json Cmdlets überwunden werden können.

  • Wenn zwei oder mehr Schlüssel in einem JSON-Objekt ohne Berücksichtigung der Groß-/Kleinschreibung identisch sind, werden sie ohne diesen Schalter als identische Schlüssel behandelt. In diesem Fall ist nur der letzte dieser Schlüssel ohne Berücksichtigung der Groß-/Kleinschreibung im konvertierten Objekt enthalten.
  • Ohne diesen Schalter löst das Cmdlet immer dann einen Fehler aus, wenn der JSON-Code einen Schlüssel enthält, der eine leere Zeichenfolge ist. PSCustomObject kann keine Eigenschaftsnamen haben, die leere Zeichenfolgen sind. Dies kann z. B. in project.lock.json Dateien auftreten.
  • 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. Der Standardwert ist 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 übergeben 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 aufgezählt wird.

Das Festlegen dieses Parameters bewirkt, dass Arrays als einzelnes Objekt gesendet werden, anstatt jedes Element separat zu senden. Dadurch wird sichergestellt, dass JSON über ConvertTo-Jsonroundtripped werden kann.

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

Eingaben

String

Sie können eine JSON-Zeichenfolge an übergeben ConvertFrom-Json.

Ausgaben

PSCustomObject

OrderedHashtable

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 eine [datetime] instance, deren Kind Eigenschaft wie folgt festgelegt ist:

  • Unspecified, wenn die Eingabezeichenfolge keine Zeitzoneninformationen enthält.
  • Utc, wenn die Zeitzoneninformationen eine nachgestellte Zsind.
  • Local, wenn die Zeitzoneninformationen als nachfolgendes UTC-Offset wie +02:00angegeben werden. Der Offset wird ordnungsgemäß in die konfigurierte Zeitzone des Aufrufers konvertiert. Die Standardausgabeformatierung 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 AsHashtable-Parameter eine OrderedHashtable. Die Schlüssel-Wert-Paare werden in der Reihenfolge hinzugefügt, die in der JSON-Zeichenfolge angezeigt wird. Die OrderedHashtable behält diese Reihenfolge bei.