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.
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 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.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Indata

String

Du kan skicka en JSON-sträng till ConvertFrom-Json.

Utdata

PSCustomObject

OrderedHashtable

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 avslutande Z.
  • 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.