ConvertFrom-Json
Konwertuje ciąg w formacie JSON na obiekt niestandardowy lub tabelę skrótów.
Składnia
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Opis
Polecenie cmdlet ConvertFrom-Json
konwertuje ciąg sformatowany w formacie JavaScript Object Notation (JSON) na niestandardowy ciąg PSObject lub obiekt hashtable, który ma właściwość dla każdego pola w ciągu JSON.
Kod JSON jest często używany przez witryny sieci Web w celu zapewnienia tekstowej reprezentacji obiektów. Polecenie cmdlet dodaje właściwości do nowego obiektu podczas przetwarzania każdego wiersza ciągu JSON.
Standard JSON zezwala na zduplikowane nazwy kluczy, które są zabronione w psObject i hashtable typów. Jeśli na przykład ciąg JSON zawiera zduplikowane klucze, tylko ostatni klucz jest używany przez to polecenie cmdlet. Zobacz inne przykłady poniżej.
Aby wygenerować ciąg JSON z dowolnego obiektu, użyj polecenia cmdlet ConvertTo-Json
.
To polecenie cmdlet zostało wprowadzone w programie PowerShell 3.0.
Nuta
Począwszy od programu PowerShell 6, polecenie cmdlet obsługuje kod JSON z komentarzami. Komentarze JSON zaczynają się od dwóch ukośników (//
) znaków. Komentarze JSON nie są przechwytywane w danych wyjściowych obiektów przez polecenie cmdlet . Przed programem PowerShell 6 ConvertFrom-Json
zwróci błąd podczas napotkania komentarza JSON.
Przykłady
Przykład 1. Konwertowanie obiektu DateTime na obiekt JSON
To polecenie używa poleceń cmdlet ConvertTo-Json
i ConvertFrom-Json
do konwertowania obiektu DateTime z polecenia cmdlet Get-Date
do obiektu JSON, a następnie do obiektu 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
W przykładzie użyto polecenia cmdlet Select-Object
, aby pobrać wszystkie właściwości obiektu DateTime. Używa on polecenia cmdlet ConvertTo-Json
do konwertowania obiektu DateTime na ciąg sformatowany jako obiekt JSON i polecenie cmdlet ConvertFrom-Json
w celu przekonwertowania ciągu w formacie JSON na obiekt PSCustomObject.
Przykład 2. Pobieranie ciągów JSON z usługi internetowej i konwertowanie ich na obiekty programu PowerShell
To polecenie używa polecenia cmdlet Invoke-WebRequest
do pobierania ciągów JSON z usługi internetowej, a następnie używa polecenia cmdlet ConvertFrom-Json
do konwertowania zawartości JSON na obiekty, którymi można zarządzać w programie PowerShell.
# 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
Możesz również użyć polecenia cmdlet Invoke-RestMethod
, które automatycznie konwertuje zawartość JSON na obiekty.
Przykład 3. Konwertowanie ciągu JSON na obiekt niestandardowy
W tym przykładzie pokazano, jak za pomocą polecenia cmdlet ConvertFrom-Json
przekonwertować plik JSON na obiekt niestandardowy programu PowerShell.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
Polecenie używa Get-Content cmdlet, aby pobrać ciągi w pliku JSON. Parametr Raw zwraca cały plik jako pojedynczy obiekt JSON. Następnie używa operatora potoku do wysyłania rozdzielanego ciągu do polecenia cmdlet ConvertFrom-Json
, które konwertuje go na obiekt niestandardowy.
Przykład 4. Konwertowanie ciągu JSON na tabelę skrótów
To polecenie pokazuje przykład, w którym przełącznik -AsHashtable
może przezwyciężyć ograniczenia polecenia.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
Ciąg JSON zawiera dwie pary wartości klucza z kluczami, które różnią się tylko wielkością liter. Bez przełącznika polecenie spowodowałoby wystąpienie błędu.
Przykład 5. Zaokrąglanie pojedynczej tablicy elementów
To polecenie pokazuje przykład, w którym przełącznik -NoEnumerate
jest używany do zaokrąglania pojedynczej tablicy JSON elementu.
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
Ciąg JSON zawiera tablicę z jednym elementem. Bez przełącznika konwertowanie kodu JSON na obiekt PSObject, a następnie konwertowanie go z powrotem przy użyciu polecenia ConvertTo-Json
powoduje utworzenie pojedynczej liczby całkowitej.
Parametry
-AsHashtable
Konwertuje kod JSON na obiekt tabeli skrótów. Ten przełącznik został wprowadzony w programie PowerShell 6.0. Począwszy od programu PowerShell 7.3, obiekt jest OrderHashtable i zachowuje kolejność kluczy z formatu JSON. W poprzednich wersjach obiekt jest hashtable.
Istnieje kilka scenariuszy, w których można przezwyciężyć pewne ograniczenia polecenia cmdlet ConvertFrom-Json
.
- Bez tego przełącznika, gdy co najmniej dwa klucze w obiekcie JSON są bez uwzględniania wielkości liter, są traktowane jako identyczne klucze. W takim przypadku w przekonwertowanym obiekcie znajduje się tylko ostatni z tych kluczy bez uwzględniania wielkości liter.
- Bez tego przełącznika polecenie cmdlet zgłasza błąd za każdym razem, gdy kod JSON zawiera klucz, który jest pustym ciągiem.
PSCustomObject nie może mieć nazw właściwości, które są pustymi ciągami. Na przykład może to wystąpić w plikach
project.lock.json
. - Tabele skrótów mogą być przetwarzane szybciej dla niektórych struktur danych.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Depth
Pobiera lub ustawia maksymalną głębokość, która może zawierać dane wejściowe JSON. Wartość domyślna to 1024.
Ten parametr został wprowadzony w programie PowerShell 6.2.
Typ: | Int32 |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-InputObject
Określa ciągi JSON do konwersji na obiekty JSON. Wprowadź zmienną zawierającą ciąg lub wpisz polecenie lub wyrażenie, które pobiera ciąg. Możesz również przekazać ciąg do ConvertFrom-Json
.
Parametr InputObject jest wymagany, ale jego wartość może być pustym ciągiem. Gdy obiekt wejściowy jest pustym ciągiem, ConvertFrom-Json
nie generuje żadnych danych wyjściowych. Nie można $null
wartości InputObject .
Typ: | String |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-NoEnumerate
Określa, że dane wyjściowe nie są wyliczane.
Ustawienie tego parametru powoduje wysyłanie tablic jako pojedynczego obiektu zamiast wysyłania każdego elementu oddzielnie. Gwarantuje to, że kod JSON może być zaokrąglony za pośrednictwem ConvertTo-Json
.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Możesz przekazać ciąg JSON do ConvertFrom-Json
.
Dane wyjściowe
PSCustomObject
Uwagi
To polecenie cmdlet jest implementowane przy użyciu Newtonsoft Json.NET.
Począwszy od programu PowerShell 6, ConvertTo-Json
próbuje przekonwertować ciągi sformatowane jako znaczniki czasu na wartości DateTime. Przekonwertowana wartość to wystąpienie [datetime]
z ustawioną właściwością Kind
w następujący sposób:
-
Unspecified
, jeśli w ciągu wejściowym nie ma informacji o strefie czasowej. -
Utc
, jeśli informacje o strefie czasowej są końcoweZ
. -
Local
, jeśli informacje o strefie czasowej są podane jako końcowe przesunięcie, takie jak+02:00
. Przesunięcie jest poprawnie konwertowane na skonfigurowaną strefę czasową elementu wywołującego. Domyślne formatowanie danych wyjściowych nie wskazuje oryginalnego przesunięcia strefy czasowej.
Typ PSObject zachowuje kolejność właściwości, jak pokazano w ciągu JSON. Począwszy od programu PowerShell 7.3 parametr AsHashtable tworzy OrderedHashtable. Pary klucz-wartość są dodawane w kolejności przedstawionej w ciągu JSON. OrderHashtable zachowuje kolejność.