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]
    [-DateKind <JsonDateKind>]
    [-Depth <Int32>]
    [-NoEnumerate]
    [<CommonParameters>]

Description

Cmdleten ConvertFrom-Json konverterar en JSON-formaterad sträng (JavaScript Object Notation) till en anpassad 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 duplicerade nyckelnamn, vilket är förbjudet i PSObject- och Hashtable- typer. 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

I Windows PowerShell 5.1 returnerade ConvertFrom-Json ett fel när en JSON-kommentar påträffades. I PowerShell 6 och senare stöder cmdleten JSON med kommentarer. JSON-kommentarer samlas inte in i objektens utdata av cmdleten. Mer information finns i avsnittet JSON-kommentarer i artikeln about_Comments.

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    : Monday, January 29, 2024 3:10:26 PM
Date        : 1/29/2024 12:00:00 AM
Day         : 29
DayOfWeek   : 1
DayOfYear   : 29
Hour        : 15
Kind        : 2
Millisecond : 931
Microsecond : 47
Nanosecond  : 600
Minute      : 10
Month       : 1
Second      : 26
Ticks       : 638421378269310476
TimeOfDay   : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
              Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
              TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
              TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
              TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year        : 2024

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 -Raw JsonFile.json | ConvertFrom-Json

Kommandot använder Get-Content cmdlet 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 -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. 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 den 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ä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.

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

-DateKind

Anger den metod som används vid parsning av datumtidsvärden i JSON-strängen. De godtagbara värdena för den här parametern är:

  • Default
  • Local
  • Utc
  • Offset
  • String

Information om hur dessa värden påverkar konverteringen finns i informationen i NOTES-.

Den här parametern introducerades i PowerShell 7.5.

Parameteregenskaper

Typ:Microsoft.PowerShell.Commands.JsonDateKind
Standardvärde:Default
Godkända värden:Default, Local, Utc, Offset, String
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. Standardvärdet är 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 vara $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

OrderedHashtable

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.

PowerShell 7.5 lade till parametern DateKind, vilket gör att du kan styra hur tidsstämpelsträngen konverteras. Parametern accepterar följande värden:

  • Default – Konverterar tidsstämpeln till en [datetime] instans enligt följande regler:
    • Om det inte finns någon tidszonsinformation i indatasträngen konverterar Json.NET serialiseraren värdet som ett ospecificerat tidsvärde.
    • Om tidszonsinformationen är en avslutande Zkonverterar Json.NET serialiseraren tidsstämpeln till ett UTC- värde.
    • Om tidsstämpeln innehåller en UTC-förskjutning som +02:00konverteras förskjutningen till anroparens konfigurerade tidszon. Standardutdataformateringen anger inte den ursprungliga tidszonsförskjutningen.
  • Local – Konverterar tidsstämpeln till en [datetime] instans i lokala tid. Om tidsstämpeln innehåller en UTC-förskjutning konverteras förskjutningen till anroparens konfigurerade tidszon. Standardutdataformateringen anger inte den ursprungliga tidszonsförskjutningen.
  • Utc – Konverterar värdet till en [datetime] instans i UTC-tid.
  • Offset – Konverterar tidsstämpeln till en [DateTimeOffset]-instans där tidszonens förskjutning för den ursprungliga strängen bevaras i den instansen. Om råsträngen inte innehåller någon tidszonsförskjutning anges värdet DateTimeOffset i den lokala tidszonen.
  • String – bevarar värdet för [string]-instansen. Detta säkerställer att all anpassad parsningslogik kan tillämpas på råsträngsvärdet.

PSObject- typ upprätthåller ordningen på egenskaperna enligt 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. OrderedHashtable bevarar ordningen.