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 i 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 den här cmdleten. Se andra exempel nedan.
Om du vill generera en JSON-sträng från ett objekt använder du cmdleten ConvertTo-Json
.
Den här cmdleten introducerades i PowerShell 3.0.
Kommentar
Från och med PowerShell 6 stöder cmdleten JSON med kommentarer. JSON-kommentarer börjar med två snedstreck (//
) tecken. JSON-kommentarer samlas inte in i objektens utdata av cmdleten. Före PowerShell 6 ConvertFrom-Json
skulle ett fel returneras 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 en 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 cmdleten Get-Content för att hämta strängarna i en JSON-fil. Parametern Raw 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: Tur och retur för en matris med ett enda element
Det här kommandot visar ett exempel där växeln -NoEnumerate
används för att köra om 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 en PSObject och sedan konvertera tillbaka den 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 Hashtable.
Det finns flera scenarier där det kan övervinna vissa begränsningar i cmdleten ConvertFrom-Json
.
- Utan den här växeln, när två eller flera nycklar i ett JSON-objekt är skiftlägesokänsligt identiska, behandlas de som identiska nycklar. I så fall ingår endast den sista av de skiftlägeskä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.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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.
Typ: | Int32 |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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
.
Typ: | String |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-NoEnumerate
Anger att utdata inte räknas upp.
Om du anger den här parametern skickas matriser som ett enskilt objekt i stället för att varje element skickas separat. Detta garanterar att JSON kan avrundas via ConvertTo-Json
.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
Indata
Du kan skicka en JSON-sträng till ConvertFrom-Json
.
Utdata
PSCustomObject
Kommentarer
Den här cmdleten implementeras med Newtonsoft Json.NET.
Från och med PowerShell 6 ConvertTo-Json
försöker konvertera strängar som är 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 enligt vad som visas i JSON-strängen. Från och med PowerShell 7.3 skapar parametern AsHashtable en OrderedHashtable. Nyckel/värde-par läggs till i den ordning som visas i JSON-strängen. OrderHashtable bevarar den ordningen.