Sdílet prostřednictvím


ConvertFrom-Json

Převede řetězec ve formátu JSON na vlastní objekt nebo tabulku hash.

Syntaxe

Default (Výchozí)

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 do nového objektu při zpracování každého řádku ř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.

Tento cmdlet byl zaveden 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 6 a novějších podporuje cmdlet JSON s komentáři. Komentáře JSON nejsou zahrnuty ve výstupu objektů cmdletem. 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. 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. Počínaje PowerShellem 7.3 je objekt OrderedHashtable a zachovává pořadí klíčů z JSON. V předchozích verzích je objektem tabulka hash.

Existuje několik scénářů, kdy může překonat některá omezení cmdletu ConvertFrom-Json.

  • Bez tohoto přepínače se dva nebo více klíčů v objektu JSON, bez rozlišování velkých a malých písmen, považují za identické. V takovém případě je do převedeného objektu zahrnut pouze poslední z těchto klíčů, které jsou na velikosti písmen nezávisle identické.
  • 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 znaků. 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.

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

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

Vlastnosti parametru

Typ:Microsoft.PowerShell.Commands.JsonDateKind
Default value:Default
Přípustné hodnoty:Default, Local, Utc, Offset, String
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. Výchozí hodnota je 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. Hodnota InputObject nemůže být $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 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 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

OrderedHashtable

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.

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 informace o časovém pásmu jsou na konci jako 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 čas 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 zadána 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í.