ConvertFrom-Json
Konverterar en JSON-formaterad sträng till ett anpassat objekt eller en hash-tabell.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[<CommonParameters>]
Description
Cmdleten ConvertFrom-Json
konverterar en JSON-formaterad sträng (JavaScript Object Notation) till ett anpassat PSCustomObject-objekt som har en egenskap för varje fält i JSON-strängen. JSON används ofta av webbplatser för att tillhandahålla en textrepresentation av objekt. JSON-standarden förbjuder inte användning som är förbjuden med ett PSCustomObject. Om JSON-strängen till exempel innehåller dubblettnycklar används endast den sista nyckeln av denna cmdlet. Se andra exempel nedan.
Om du vill generera en JSON-sträng från ett objekt använder du cmdleten ConvertTo-Json
.
Denna cmdlet introducerades i PowerShell 3.0.
Anteckning
Från och med PowerShell 6 stöder den här cmdleten JSON med kommentarer. Accepterade kommentarer startas med två snedstreck (//
). Kommentaren representeras inte i data och kan skrivas i filen utan att skada data eller utlösa ett fel som det gjorde i PowerShell 5.1.
Exempel
Exempel 1: Konvertera ett DateTime-objekt till ett JSON-objekt
Det här kommandot använder ConvertTo-Json
cmdletarna och ConvertFrom-Json
för att konvertera ett DateTime-objekt från cmdleten Get-Date
till ett JSON-objekt och sedan till ett 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
I exemplet används cmdleten Select-Object
för att hämta alla egenskaper för DateTime-objektet . Den använder cmdleten ConvertTo-Json
för att konvertera DateTime-objektet till en sträng formaterad som ett JSON-objekt och cmdleten ConvertFrom-Json
för att konvertera den JSON-formaterade strängen till ett PSCustomObject-objekt .
Exempel 2: Hämta JSON-strängar från en webbtjänst och konvertera dem till PowerShell-objekt
Det här kommandot använder cmdleten Invoke-WebRequest
för att hämta JSON-strängar från en webbtjänst och använder sedan cmdleten ConvertFrom-Json
för att konvertera JSON-innehåll till objekt som kan hanteras i 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
Du kan också använda cmdleten Invoke-RestMethod
som automatiskt konverterar JSON-innehåll till objekt.
Exempel 3: Konvertera en JSON-sträng till ett anpassat objekt
Det här exemplet visar hur du använder cmdleten ConvertFrom-Json
för att konvertera en JSON-fil till ett anpassat PowerShell-objekt.
Get-Content JsonFile.JSON | ConvertFrom-Json
Kommandot använder Get-Content cmdlet för att hämta strängarna i en JSON-fil. Sedan använder den pipelineoperatorn för att skicka den avgränsade strängen till cmdleten ConvertFrom-Json
, som konverterar den till ett anpassat objekt.
Exempel 4: Konvertera en JSON-sträng till en hash-tabell
Det här kommandot visar ett exempel där växeln -AsHashtable
kan övervinna begränsningarna i kommandot.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
JSON-strängen innehåller två nyckel/värde-par med nycklar som endast skiljer sig åt i höljet. Utan växeln skulle kommandot ha genererat ett fel.
Parametrar
-AsHashtable
Konverterar JSON till ett hash-tabellobjekt. Den här växeln introducerades i PowerShell 6.0. Det finns flera scenarier där det kan lösa vissa begränsningar i cmdleten ConvertFrom-Json
.
- Om JSON innehåller en lista med nycklar som bara skiljer sig åt i höljet. Utan växeln skulle dessa nycklar ses som identiska nycklar och därför skulle endast den sista användas.
- Om JSON innehåller en nyckel som är en tom sträng. Utan växeln skulle cmdleten utlösa ett fel eftersom en
PSCustomObject
inte tillåter det, men en hash-tabell gör det. Ett exempel på användningsfall där detta kan inträffa ärproject.lock.json
filer. - Hash-tabeller kan bearbetas snabbare för vissa datastrukturer.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
Hämtar eller anger det maximala djup som JSON-indata tillåts ha. Som standard är det 1024.
Den här parametern introducerades i PowerShell 6.2.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Anger JSON-strängarna som ska konverteras till JSON-objekt. Ange en variabel som innehåller strängen eller skriv ett kommando eller uttryck som hämtar strängen. Du kan också skicka en sträng till ConvertFrom-Json
.
Parametern InputObject krävs, men dess värde kan vara en tom sträng. När indataobjektet är en tom sträng ConvertFrom-Json
genererar inga utdata. InputObject-värdet får inte vara $null
.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Indata
Du kan skicka en JSON-sträng till ConvertFrom-Json
.
Utdata
PSCustomObject
Kommentarer
Denna cmdlet implementeras med Newtonsoft Json.NET.
Från och med PowerShell 6 ConvertTo-Json
försöker konvertera strängar formaterade som tidsstämplar till DateTime-värden . Det konverterade värdet är en [datetime]
instans med en Kind
egenskapsuppsättning på följande sätt:
Unspecified
, om det inte finns någon tidszonsinformation i indatasträngen.Utc
, om tidszonsinformationen är en avslutandeZ
.Local
, om tidszonsinformationen anges som en avslutande UTC-förskjutning som+02:00
. Förskjutningen konverteras korrekt till anroparens konfigurerade tidszon. Standardutdataformateringen anger inte den ursprungliga tidszonsförskjutningen.