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 ConvertFrom-Json
cmdlet konwertuje ciąg w formacie JavaScript Object Notation (JSON) na niestandardowy obiekt PSCustomObject , 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. Standard JSON nie zabrania użycia zabronionego przez obiekt PSCustomObject. 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 ConvertTo-Json
polecenia cmdlet .
To polecenie cmdlet zostało wprowadzone w programie PowerShell 3.0.
Uwaga
Począwszy od programu PowerShell 6, to polecenie cmdlet obsługuje kod JSON z komentarzami. Zaakceptowane komentarze są uruchamiane z dwoma ukośnikami (//
). Komentarz nie będzie reprezentowany w danych i można go zapisać w pliku bez uszkodzenia danych lub zgłaszania błędu, tak jak w programie PowerShell 5.1.
Przykłady
Przykład 1. Konwertowanie obiektu DateTime na obiekt JSON
To polecenie używa ConvertTo-Json
poleceń cmdlet i ConvertFrom-Json
do konwertowania obiektu DateTime z Get-Date
polecenia cmdlet na obiekt 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 Select-Object
polecenia cmdlet , aby pobrać wszystkie właściwości obiektu DateTime . Używa ConvertTo-Json
polecenia cmdlet do konwertowania obiektu DateTime na ciąg sformatowany jako obiekt JSON i ConvertFrom-Json
polecenie cmdlet 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 Invoke-WebRequest
polecenia cmdlet do pobierania ciągów JSON z usługi internetowej, a następnie używa ConvertFrom-Json
polecenia cmdlet 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ć Invoke-RestMethod
polecenia cmdlet , które automatycznie konwertuje zawartość JSON na obiekty.
Przykład 3. Konwertowanie ciągu JSON na obiekt niestandardowy
W tym przykładzie ConvertFrom-Json
pokazano, jak za pomocą polecenia cmdlet przekonwertować plik JSON na obiekt niestandardowy programu PowerShell.
Get-Content JsonFile.JSON | ConvertFrom-Json
Polecenie używa polecenia cmdlet Get-Content w celu pobrania ciągów w pliku JSON. Następnie używa operatora potoku do wysyłania rozdzielanego ciągu do ConvertFrom-Json
polecenia cmdlet, 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 -AsHashtable
przełącznik 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 -NoEnumerate
przełącznik jest używany do zaokrąglania tablicy JSON pojedynczego 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 pojedynczym elementem. Bez przełącznika konwertowanie kodu JSON na obiekt PSObject, a następnie konwertowanie go z powrotem za ConvertTo-Json
pomocą polecenia 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. Istnieje kilka scenariuszy, w których można przezwyciężyć pewne ograniczenia ConvertFrom-Json
polecenia cmdlet.
- Jeśli kod JSON zawiera listę z kluczami, które różnią się wielkością liter. Bez przełącznika klucze te byłyby postrzegane jako identyczne klucze, a więc tylko ostatni zostanie użyty.
- Jeśli kod JSON zawiera klucz, który jest pustym ciągiem. Bez przełącznika polecenie cmdlet zgłosi błąd, ponieważ
PSCustomObject
polecenie cmdlet nie zezwala na to, ale tabela skrótów. Przykładowy przypadek użycia, w którym może to nastąpić, toproject.lock.json
pliki. - Tabele skrótów mogą być przetwarzane szybciej dla niektórych struktur danych.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
Pobiera lub ustawia maksymalną głębokość, która może zawierać dane wejściowe JSON. Domyślnie jest to 1024.
Ten parametr został wprowadzony w programie PowerShell 6.2.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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
ciągu .
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. Wartość InputObject nie może być wartością $null
.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
Określa, że dane wyjściowe nie są wyliczane.
Ustawienie tego parametru powoduje wysł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 polecenia ConvertTo-Json
.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Dane wejściowe
Ciąg JSON można przekazać potokiem do ConvertFrom-Json
.
Dane wyjściowe
PSCustomObject
Uwagi
To polecenie cmdlet jest implementowane przy użyciu Json.NET Newtonsoft.
Począwszy od programu PowerShell 6, ConvertTo-Json
próbuje przekonwertować ciągi sformatowane jako znaczniki czasu na wartości DateTime . Przekonwertowana wartość jest wystąpieniem [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 UTC, takie jak+02:00
. Przesunięcie jest poprawnie konwertowane na skonfigurowaną strefę czasową wywołującego. Domyślne formatowanie danych wyjściowych nie wskazuje oryginalnego przesunięcia strefy czasowej.