Freigeben über


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 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 textbezogene Darstellung von Objekten bereitzustellen. Der JSON-Standard verbietet keine Verwendung, die mit einem PSCustomObject verboten ist. 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 dieses Cmdlet JSON mit Kommentaren. Akzeptierte Kommentare werden mit zwei Schrägstrichen (//) begonnen. Der Kommentar wird nicht in den Daten dargestellt und kann in die Datei geschrieben werden, ohne die Daten zu beschädigen oder einen Fehler auszulösen, wie dies in PowerShell 5.1 der Fall war.

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 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 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. Es gibt mehrere Szenarien, in denen einige Einschränkungen des cmdlets ConvertFrom-Json überwunden werden können.

  • Wenn der JSON-Code eine Liste mit Schlüsseln enthält, die sich nur in der Groß-/Kleinschreibung unterscheiden. Ohne den Schalter würden diese Schlüssel als identische Schlüssel angesehen und daher würde nur der letzte verwendet werden.
  • Wenn der JSON-Code einen Schlüssel enthält, der eine leere Zeichenfolge ist. Ohne diese Option würde das Cmdlet einen Fehler auslösen, da a PSCustomObject dies nicht zulässt, eine Hashtabelle jedoch schon. Ein Beispiel für einen Anwendungsfall, in dem dies auftreten kann, sind project.lock.json Dateien.
  • 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. Standardmäßig ist es 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, ConvertFrom-Json wird keine Ausgabe generiert. Der InputObject-Wert darf nicht sein $null.

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 aufgelistet 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

Hashtable

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 nachgestelltes Z ist.
  • Local, wenn die Zeitzoneninformation als nachgestellter UTC Offset wie +02:00 angegeben wird. Der Offset wird korrekt in die vom Aufrufer konfigurierte Zeitzone umgewandelt. Die Standardformatierung der Ausgabe gibt nicht den ursprünglichen Zeitzonenversatz an.