Dela via


ConvertFrom-Json

Konverterar en JSON-formaterad sträng till ett anpassat objekt eller en hash-tabell.

Syntax

Default (Standard)

ConvertFrom-Json
    [-InputObject] <String>
    [-AsHashtable]
    [-Depth <Int32>]
    [-NoEnumerate]
    [<CommonParameters>]

Description

Cmdleten ConvertFrom-Json konverterar en JSON-formaterad sträng (JavaScript Object Notation) till en anpassad 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 en PSCustomObject-. 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.

Anmärkning

Från och med PowerShell 6 stöder den här cmdleten JSON med kommentarer. Accepterade kommentarer inleds med två snedstreck (//). Kommentaren representeras inte i data och kan skrivas i filen utan att skada data eller utlösa ett fel som i PowerShell 5.1.

Exempel

Exempel 1: Konvertera ett DateTime-objekt till ett JSON-objekt

Det här kommandot använder cmdletarna ConvertTo-Json 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 objektet DateTime. Den använder cmdleten ConvertTo-Json för att konvertera DateTime--objektet till en sträng formaterad som ett JSON-objekt och ConvertFrom-Json-cmdleten 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 -AsHashtable-växeln kan övervinna begränsningarna i kommandot.

'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable

JSON-strängen innehåller två nyckelvärdespar med nycklar som endast skiljer sig åt i versaliseringen. 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 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 denna inställning resulterar omvandlingen av JSON till en PSObject och sedan 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. Det finns flera scenarier där den kan övervinna vissa begränsningar i cmdleten ConvertFrom-Json.

  • Om JSON innehåller en lista med nycklar som bara skiljer sig åt i höljet. Utan omkopplaren skulle dessa nycklar ses som identiska nycklar och därför skulle bara 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 a PSCustomObject inte tillåter det, men en hash-tabell gör det. Ett exempel på ett användningsfall där detta kan inträffa är project.lock.json filer.
  • Hash-tabeller kan bearbetas snabbare för vissa datastrukturer.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:Int32
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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 genererar ConvertFrom-Json inga utdata. Värdet InputObject kan inte $null.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:0
Obligatorisk:True
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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 omvandlas fram och tillbaka via ConvertTo-Json.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

Indata

String

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

Utdata

PSCustomObject

Hashtable

Kommentarer

Den här cmdleten implementeras med hjälp av Newtonsoft Json.NET.

Från och med PowerShell 6 försöker ConvertTo-Json konvertera strängar som är formaterade som tidsstämplar till DateTime- värden. Det konverterade värdet är en [datetime]-instans med en Kind egenskap inställd på följande sätt:

  • Unspecified, om det inte finns någon tidszonsinformation i indatasträngen.
  • Utcom tidszonsinformationen är den sista 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.