ConvertFrom-Json
Převede řetězec ve formátu JSON na vlastní objekt nebo tabulku hash.
Syntaxe
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 PSObject nebo 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ů. Rutina přidá vlastnosti do nového objektu, protože zpracovává každý řádek řetězce JSON.
Standard JSON umožňuje duplicitní názvy klíčů, které jsou zakázány v typech PSObject a Hashtable . 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:
Počínaje PowerShellem 6 podporuje rutina JSON s komentáři. Komentáře JSON začínají dvěma lomítky (//
) znaky. Komentáře JSON nejsou zachyceny ve výstupu objektů rutinou. Před PowerShellem 6 ConvertFrom-Json
by se při výskytu komentáře JSON vrátila chyba.
Příklady
Příklad 1: Převod objektu DateTime na objekt JSON
Tento příkaz používá ConvertTo-Json
a ConvertFrom-Json
rutiny k převodu objektu DateTime z Get-Date
rutiny na objekt JSON pak 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 . Pomocí rutiny ConvertTo-Json
převede objekt DateTime na řetězec formátovaný jako objekt JSON a rutina ConvertFrom-Json
převede řetězec 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í ConvertFrom-Json
této rutiny 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. Nezpracovaný parametr vrátí celý soubor jako jeden objekt JSON. Potom pomocí operátoru kanálu odešle řetězec s oddělovači do ConvertFrom-Json
rutiny, která ho převede na vlastní objekt.
Příklad 4: Převod řetězce JSON na tabulku hash
Tento příkaz ukazuje příklad, ve kterém -AsHashtable
může přepínač 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 v písmenech. 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 -NoEnumerate
se přepínač 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 pak ho převedete zpět příkazem ConvertTo-Json
, který bude obsahovat 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 určitá omezení rutiny ConvertFrom-Json
.
- Bez tohoto přepínače jsou dva nebo více klíčů v objektu JSON nerozlišující velká a malá písmena, jsou 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íčů bez rozlišování velkých a malých 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 například dojít 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 |
-Depth
Získá nebo nastaví maximální hloubku vstupu 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á. Řetězec můžete také převést na ConvertFrom-Json
.
Parametr InputObject je povinný, ale jeho hodnota může být prázdný řetězec. Pokud je vstupním objektem prázdný řetězec, ConvertFrom-Json
nevygeneruje žá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 je možné přecházet 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 PowerShellem 6 ConvertTo-Json
se pokusí převést řetězce formátované jako časová razítka na hodnoty DateTime . Převedená hodnota je instance s nastavenou [datetime]
Kind
vlastností 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é posuny UTC, například+02:00
. Posun je správně převeden na nakonfigurované časové pásmo volajícího. Výchozí formátování výstupu neznačí původní posun časového pásma.
Typ PSObject udržuje pořadí vlastností, jak je znázorněno v řetězci JSON. Počínaje PowerShellem 7.3 vytvoří parametr AsHashtable tabulku OrderedHashtable. Páry klíč-hodnota se přidají v pořadí uvedeném v řetězci JSON. OrderHashtable zachová toto pořadí.