ConvertFrom-Json
Konverterar en JSON-formaterad sträng till ett anpassat objekt eller en hash-tabell.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Cmdleten ConvertFrom-Json
konverterar en JSON-formaterad sträng (JavaScript Object Notation) till ett anpassat PSObject - eller Hashtable-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. Cmdleten lägger till egenskaperna till det nya objektet när varje rad i JSON-strängen bearbetas.
JSON-standarden tillåter dubbletter av nyckelnamn, vilket är förbjudet i typerna PSObject och Hashtable . 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 cmdleten JSON med kommentarer. JSON-kommentarer börjar med två snedstreck (//
) tecken. JSON-kommentarer registreras inte i objektens utdata av cmdleten. Före PowerShell 6 ConvertFrom-Json
skulle returnera ett fel när en JSON-kommentar påträffades.
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 -Raw JsonFile.JSON | ConvertFrom-Json
Kommandot använder Get-Content cmdlet för att hämta strängarna i en JSON-fil. Raw-parametern returnerar hela filen som ett enda JSON-objekt. 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.
Exempel 5: Rundresa för en enstaka elementmatris
Det här kommandot visar ett exempel där växeln -NoEnumerate
används för att flytta en JSON-matris med ett enda element.
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
JSON-strängen innehåller en matris med ett enda element. Utan växeln resulterar konvertering av JSON till ett PSObject och sedan konverterar den tillbaka med ConvertTo-Json
kommandot i ett enda heltal.
Parametrar
-AsHashtable
Konverterar JSON till ett hash-tabellobjekt. Den här växeln introducerades i PowerShell 6.0. Från och med PowerShell 7.3 är objektet en OrderedHashtable och bevarar ordningen på nycklarna från JSON. I tidigare versioner är objektet en Hash-tabell.
Det finns flera scenarier där det kan lösa vissa begränsningar i cmdleten ConvertFrom-Json
.
- Utan den här växeln behandlas två eller flera nycklar i ett JSON-objekt som skiftlägesokänsligt identiska som identiska nycklar. I så fall ingår endast de sista skiftlägesokänsligt identiska nycklarna i det konverterade objektet.
- Utan den här växeln genererar cmdleten ett fel när JSON innehåller en nyckel som är en tom sträng. PSCustomObject kan inte ha egenskapsnamn som är tomma strängar. Detta kan till exempel inträffa i
project.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. Standardvärdet är 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 |
-NoEnumerate
Anger att utdata inte räknas upp.
Om den här parametern anges skickas matriser som ett enda objekt i stället för att varje element skickas separat. Detta garanterar att JSON kan avrundas via ConvertTo-Json
.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
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.
PSObject-typen upprätthåller ordningen på egenskaperna som visas i JSON-strängen. Från och med PowerShell 7.3 skapar parametern AsHashtable en OrderedHashtable. Nyckel/värde-paren läggs till i den ordning som visas i JSON-strängen. OrderedHashtable bevarar den ordningen.