ConvertFrom-Json
Převede řetězec ve formátu JSON na vlastní objekt nebo tabulku hash.
Syntax
Default (Výchozí)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Rutina ConvertFrom-Json převede řetězec ve formátu JSON (JavaScript Object Notation) na vlastní objekt PSCustomObject objekt, 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ů. Standard JSON nezakazuje použití, které je zakázáno s PSCustomObject. 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.
Tento cmdlet byl zaveden v PowerShellu 3.0.
Poznámka:
Počínaje PowerShellem 6 tato rutina podporuje JSON s komentáři. Přijaté komentáře začínají dvěma lomítky (//). Komentář nebude reprezentován v datech a lze jej zapsat do souboru, aniž by došlo k poškození dat nebo vyvolání chyby, jako tomu bylo v PowerShellu 5.1.
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 : 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
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 JsonFile.JSON | ConvertFrom-Json
Příkaz používá rutinu Get-Content k získání řetězců v souboru JSON. Potom pomocí operátoru kanálu odešle oddělený řetězec do rutiny ConvertFrom-Json, která ho převede na uživatelsky definovaný 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. Existuje několik scénářů, kdy může překonat některá omezení cmdletu ConvertFrom-Json.
- Pokud kód JSON obsahuje seznam s klíči, které se liší pouze velkými a malými písmeny. Bez přepínače by tyto klíče byly považovány za identické klíče, a proto by se používal pouze ten poslední.
- Pokud kód JSON obsahuje klíč, jedná se o prázdný řetězec. Bez přepínače by rutina vyvolala chybu, protože a
PSCustomObjectto neumožňuje, ale zatřiďovací tabulka ano. Příkladem případu použití, kde k tomu může dojít, jsouproject.lock.jsonsoubory. - Tabulky hash je možné zpracovat rychleji pro určité datové struktury.
Vlastnosti parametru
| Typ: | SwitchParameter |
| Default value: | False |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-Depth
Určuje nebo nastavuje maximální hloubku, kterou může mít vstup JSON. Ve výchozím nastavení je to 1024.
Tento parametr byl představen v PowerShellu 6.2.
Vlastnosti parametru
| Typ: | Int32 |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | 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 či výraz pro jeho získání. Můžete také přesměrovat řetězec na 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. Hodnotu InputObject nelze $null.
Vlastnosti parametru
| Typ: | String |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | 0 |
| Povinné: | True |
| Hodnota z kanálu: | True |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-NoEnumerate
Určuje, že výstup nebude vytvořen.
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 přenášet tam a zpět přes ConvertTo-Json.
Vlastnosti parametru
| Typ: | SwitchParameter |
| Default value: | False |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
CommonParameters
Tato rutina podporuje běžné parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction a -WarningVariable. Další informace najdete v about_CommonParameters.
Vstupy
String
Řetězec JSON můžete převést na ConvertFrom-Json.
Výstupy
PSCustomObject
Hashtable
Poznámky
Tato cmdlet 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. Převedená hodnota je instance [datetime] s vlastností Kind nastavenou následujícím způsobem:
-
Unspecified, pokud ve vstupním řetězci nejsou žádné informace o časovém pásmu. -
Utc, pokud informace o časovém pásmu jsou koncovéZ. -
Local, pokud jsou informace o časovém pásmu uvedeny jako koncové posunu UTC jako+02:00. Posun je správně převeden do časového pásma nakonfigurovaného volajícím. Výchozí formátování výstupu neoznačuje posun původního časového pásma.