ConvertFrom-Json
Převede řetězec ve formátu JSON na vlastní objekt nebo tabulku hash.
Syntaxe
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Cmdlet ConvertFrom-Json
převede řetězec ve formátu JSON (JavaScript Object Notation) na vlastní objekt PSObject nebo objekt Hashtable, který má vlastnost pro každé pole v řetězci JSON.
JSON se běžně používá na webových webech k poskytnutí textové reprezentace objektů. Cmdlet přidá vlastnosti k novému objektu při zpracovávání každého řádku řetězce JSON.
Standard JSON umožňuje duplicitní jména klíčů, které jsou zakázány v PSObject a Hashtable typy. Pokud například řetězec JSON obsahuje duplicitní klíče, použije tato rutina pouze poslední klíč. Podívejte se na další příklady níže.
K vygenerování řetězce JSON z libovolného objektu použijte rutinu ConvertTo-Json
.
Tato rutina byla představena v PowerShellu 3.0.
Poznámka
Ve Windows PowerShellu 5.1 ConvertFrom-Json
vrátil chybu, když došlo k komentáři JSON. V PowerShellu verze 6 a vyšší, příkaz podporuje JSON s komentáři. Komentáře JSON nejsou zachyceny ve výstupu objektů příkazem cmdlet. Další informace najdete v části komentáře JSON článku about_Comments.
Příklady
Příklad 1: Převod objektu DateTime na objekt JSON
Tento příkaz používá rutiny ConvertTo-Json
a ConvertFrom-Json
k převodu objektu DateTime z rutiny Get-Date
na objekt JSON a potom na PSCustomObject.
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Monday, January 29, 2024 3:10:26 PM
Date : 1/29/2024 12:00:00 AM
Day : 29
DayOfWeek : 1
DayOfYear : 29
Hour : 15
Kind : 2
Millisecond : 931
Microsecond : 47
Nanosecond : 600
Minute : 10
Month : 1
Second : 26
Ticks : 638421378269310476
TimeOfDay : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year : 2024
Příklad používá rutinu Select-Object
k získání všech vlastností objektu DateTime. Používá rutinu ConvertTo-Json
k převodu objektu DateTime na řetězec formátovaný jako objekt JSON a rutina ConvertFrom-Json
k převodu řetězce ve formátu JSON na objekt PSCustomObject.
Příklad 2: Získání řetězců JSON z webové služby a jejich převod na objekty PowerShellu
Tento příkaz pomocí rutiny Invoke-WebRequest
získá řetězce JSON z webové služby a pak pomocí rutiny ConvertFrom-Json
převede obsah JSON na objekty, které je možné spravovat v PowerShellu.
# 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
Můžete také použít rutinu Invoke-RestMethod
, která automaticky převede obsah JSON na objekty.
Příklad 3: Převod řetězce JSON na vlastní objekt
Tento příklad ukazuje, jak pomocí rutiny ConvertFrom-Json
převést soubor JSON na vlastní objekt PowerShellu.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
Příkaz používá rutinu Get-Content k získání řetězců v souboru JSON. Parametr Raw vrátí celý soubor jako jeden objekt JSON. Poté pomocí operátoru roury odešle řetězec s oddělovači do rutiny ConvertFrom-Json
, která ho převede na uživatelský objekt.
Příklad 4: Převod řetězce JSON na tabulku hash
Tento příkaz ukazuje příklad, ve kterém přepínač -AsHashtable
může překonat omezení příkazu.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
Řetězec JSON obsahuje dva páry klíč-hodnota s klíči, které se liší pouze velikostí písmen. Bez přepínače by příkaz vyvolil chybu.
Příklad 5: Zaokrouhlování pole s jedním prvkem
Tento příkaz ukazuje příklad, ve kterém se přepínač -NoEnumerate
používá k zaokrouhlování pole JSON s jedním prvkem.
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
Řetězec JSON obsahuje pole s jedním prvkem. Bez přepínače převedete JSON na objekt PSObject a následným převodem zpět pomocí příkazu ConvertTo-Json
vznikne jedno celé číslo.
Parametry
-AsHashtable
Převede JSON na objekt tabulky hash. Tento přepínač byl představen v PowerShellu 6.0. Počínaje PowerShellem 7.3 je objekt OrderedHashtable a zachovává pořadí klíčů z JSON. V předchozích verzích je objekt hashtable.
Existuje několik scénářů, kdy může překonat některá omezení ConvertFrom-Json
cmdletu.
- Bez tohoto přepínače jsou v objektu JSON dva nebo více klíčů nerozlišující velká a malá písmena považovány za identické klíče. V takovém případě je do převedeného objektu zahrnut pouze poslední z těchto klíčů, které se nerozlišují podle velikosti písmen.
- Bez tohoto přepínače rutina vyvolá chybu pokaždé, když JSON obsahuje klíč, který je prázdný řetězec.
PSCustomObject nemůže mít názvy vlastností, které jsou prázdné řetězce. Může k tomu dojít například v
project.lock.json
souborech. - Tabulky hash je možné zpracovat rychleji pro určité datové struktury.
Typ: | SwitchParameter |
Position: | Named |
Default value: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-DateKind
Určuje metodu použitou při analýze hodnot data a času v řetězci JSON. Přijatelné hodnoty pro tento parametr jsou:
Default
Local
Utc
Offset
String
Informace o tom, jak tyto hodnoty ovlivňují převod, naleznete v podrobnostech v NOTES.
Tento parametr byl představen v PowerShellu 7.5.
Typ: | Microsoft.PowerShell.Commands.JsonDateKind |
Přípustné hodnoty: | Default, Local, Utc, Offset, String |
Position: | Named |
Default value: | Default |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Depth
Získá nebo nastaví maximální hloubku, kterou vstup JSON může mít. Výchozí hodnota je 1024.
Tento parametr byl představen v PowerShellu 6.2.
Typ: | Int32 |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-InputObject
Určuje řetězce JSON, které se mají převést na objekty JSON. Zadejte proměnnou, která obsahuje řetězec, nebo zadejte příkaz nebo výraz, který řetězec získává. Řetězec můžete také přesměrovat do ConvertFrom-Json
.
Je vyžadován parametr InputObject, ale jeho hodnota může být prázdný řetězec. Pokud je vstupním objektem prázdný řetězec, ConvertFrom-Json
negeneruje žádný výstup. Hodnota InputObject nemůže být $null
.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | False |
-NoEnumerate
Určuje, že výstup není uveden.
Nastavení tohoto parametru způsobí, že pole budou odeslána jako jeden objekt místo odesílání každého prvku samostatně. To zaručuje, že JSON lze obousměrně přenášet přes ConvertTo-Json
.
Typ: | SwitchParameter |
Position: | Named |
Default value: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
Vstupy
Řetězec JSON můžete převést na ConvertFrom-Json
.
Výstupy
PSCustomObject
Poznámky
Tato rutina se implementuje pomocí Newtonsoft Json.NET.
Počínaje verzí PowerShell 6 se ConvertTo-Json
pokusí převést řetězce formátované jako časové značky na hodnoty DateTime.
PowerShell 7.5 přidal parametr DateKind, který umožňuje řídit způsob převodu časových razítek. Parametr přijímá následující hodnoty:
-
Default
– převede časové razítko na instanci[datetime]
podle následujících pravidel:- Pokud vstupní řetězec neobsahuje žádné informace o časovém pásmu, Json.NET serializátor převede hodnotu jako nezadanou časovou hodnotu.
- Pokud jsou informace o časovém pásmu koncovou
Z
, serializátor Json.NET převede časové razítko na hodnotu UTC. - Pokud časové razítko obsahuje posun UTC, jako je
+02:00
, posun se převede na nakonfigurované časové pásmo volajícího. Výchozí formátování výstupu neznačí původní posun časového pásma.
-
Local
– převede časové razítko na instanci[datetime]
v místním čase . Pokud časové razítko obsahuje posun UTC, tento posun se přepočítá na časové pásmo nastavené volajícím. Výchozí formátování výstupu neznačí původní posun časového pásma. -
Utc
– převede hodnotu na instanci[datetime]
v čase UTC. -
Offset
– převede časové razítko na instanci[DateTimeOffset]
tak, že je v ní zachován posun časového pásma původního řetězce. Pokud nezpracovaný řetězec neobsahuje posun časového pásma, hodnota DateTimeOffset bude určena v místním časovém pásmu. -
String
– zachová hodnotu instance[string]
. Tím se zajistí, že na nezpracovanou řetězcovou hodnotu se dá použít jakákoli vlastní logika analýzy.
Typ PSObject udržuje pořadí vlastností, jak je znázorněno v řetězci JSON. Počínaje verzí PowerShell 7.3, parametr AsHashtable vytváří OrderedHashtable. Páry klíč-hodnota se přidají v pořadí uvedeném v řetězci JSON. OrderedHashtable zachová toto pořadí.