Sdílet prostřednictvím


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

String

Řetězec JSON můžete převést na ConvertFrom-Json.

Výstupy

PSCustomObject

OrderedHashtable

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í.