Condividi tramite


ConvertFrom-Json

Converte una stringa formattata JSON in un oggetto personalizzato o in una tabella hash.

Sintassi

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

Descrizione

Il ConvertFrom-Json cmdlet converte una stringa formattata JSON (JavaScript Object Notation) in un oggetto PSObject o Hashtable personalizzato con una proprietà per ogni campo nella stringa JSON. Il formato JSON è comunemente usato dai siti Web per fornire una rappresentazione testuale di oggetti. Il cmdlet aggiunge le proprietà al nuovo oggetto man mano che elabora ogni riga della stringa JSON.

Lo standard JSON consente nomi di chiavi duplicati, che sono vietati nei tipi PSObject e Hashtable . Ad esempio, se la stringa JSON contiene chiavi duplicate, viene usata solo l'ultima chiave da questo cmdlet. Vedere altri esempi di seguito.

Per generare una stringa JSON da qualsiasi oggetto, usare il ConvertTo-Json cmdlet.

Questo cmdlet è stato introdotto in PowerShell 3.0.

Nota

A partire da PowerShell 6, il cmdlet supporta JSON con commenti. I commenti JSON iniziano con due barre in avanti (//). I commenti JSON non vengono acquisiti nell'output degli oggetti dal cmdlet. Prima di PowerShell 6, ConvertFrom-Json viene restituito un errore quando ha rilevato un commento JSON.

Esempio

Esempio 1: Convertire un oggetto DateTime in un oggetto JSON

Questo comando usa i ConvertTo-Json cmdlet e ConvertFrom-Json per convertire un oggetto DateTime dal Get-Date cmdlet a un oggetto JSON e quindi in un 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

Nell'esempio viene usato il Select-Object cmdlet per ottenere tutte le proprietà dell'oggetto DateTime . Usa il ConvertTo-Json cmdlet per convertire l'oggetto DateTime in una stringa formattata come oggetto JSON e il ConvertFrom-Json cmdlet per convertire la stringa formattata JSON in un oggetto PSCustomObject .

Esempio 2: Ottenere stringhe JSON da un servizio Web e convertirle in oggetti PowerShell

Questo comando usa il cmdlet per ottenere stringhe JSON da un servizio Web e quindi usa il Invoke-WebRequestConvertFrom-Json cmdlet per convertire il contenuto JSON in oggetti che possono essere gestiti in 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

È anche possibile usare il cmdlet, che converte automaticamente contenuto Invoke-RestMethod JSON in oggetti.

Esempio 3: Convertire una stringa JSON in un oggetto personalizzato

In questo esempio viene illustrato come usare il ConvertFrom-Json cmdlet per convertire un file JSON in un oggetto personalizzato di PowerShell.

Get-Content -Raw JsonFile.JSON | ConvertFrom-Json

Il comando usa Get-Content cmdlet per ottenere le stringhe in un file JSON. Il parametro Raw restituisce l'intero file come singolo oggetto JSON. Usa quindi l'operatore della pipeline per inviare la stringa delimitata al ConvertFrom-Json cmdlet, che lo converte in un oggetto personalizzato.

Esempio 4: Convertire una stringa JSON in una tabella hash

Questo comando mostra un esempio in cui l'opzione -AsHashtable può superare le limitazioni del comando.

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

La stringa JSON contiene due coppie di valori chiave con chiavi che differiscono solo in maiuscole e minuscole. Senza l'opzione, il comando avrebbe generato un errore.

Esempio 5: Round trip di una singola matrice di elementi

Questo comando mostra un esempio in cui l'opzione -NoEnumerate viene usata per eseguire il round trip di una singola matrice JSON di elementi.

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

La stringa JSON contiene una matrice con un singolo elemento. Senza l'opzione, convertire il codice JSON in un PSObject e quindi convertirlo di nuovo con il ConvertTo-Json comando genera un singolo intero.

Parametri

-AsHashtable

Converte il codice JSON in un oggetto tabella hash. Questa opzione è stata introdotta in PowerShell 6.0. A partire da PowerShell 7.3, l'oggetto è una tabella OrderHashtable e mantiene l'ordinamento delle chiavi dal codice JSON. Nelle versioni precedenti l'oggetto è una tabella Hashtable.

Esistono diversi scenari in cui può superare alcune limitazioni del ConvertFrom-Json cmdlet.

  • Senza questa opzione, quando due o più chiavi in un oggetto JSON sono senza distinzione tra maiuscole e minuscole, vengono considerate chiavi identiche. In questo caso, solo l'ultimo di tali chiavi senza distinzione tra maiuscole e minuscole è incluso nell'oggetto convertito.
  • Senza questa opzione, il cmdlet genera un errore ogni volta che il codice JSON contiene una chiave che è una stringa vuota. PSCustomObject non può avere nomi di proprietà che sono stringhe vuote. Ad esempio, questo può verificarsi nei project.lock.json file.
  • Le tabelle hash possono essere elaborate più velocemente per determinate strutture di dati.
Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Depth

Ottiene o imposta la profondità massima consentita per l'input JSON. Il valore predefinito è 1024.

Questo parametro è stato introdotto in PowerShell 6.2.

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

-InputObject

Specifica le stringhe JSON da convertire in oggetti JSON. Immettere una variabile che contiene la stringa o digitare un comando o un'espressione che ottiene la stringa. È anche possibile inviare una pipe a una stringa in ConvertFrom-Json.

Il parametro InputObject è obbligatorio, ma il relativo valore può essere una stringa vuota. Quando l'oggetto di input è una stringa vuota, ConvertFrom-Json non genera alcun output. Il valore InputObject non può essere $null.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoEnumerate

Specifica che l'output non è enumerato.

Se si imposta questo parametro, le matrici devono essere inviate come singolo oggetto anziché inviare ogni elemento separatamente. Ciò garantisce che JSON possa essere arrotondato tramite ConvertTo-Json.

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

Input

String

È possibile inviare una pipe a una stringa JSON in ConvertFrom-Json.

Output

PSCustomObject

OrderedHashtable

Note

Questo cmdlet viene implementato usando Newtonsoft Json.NET.

A partire da PowerShell 6, ConvertTo-Json tenta di convertire le stringhe formattate come timestamp in valori DateTime . Il valore convertito è un'istanza [datetime] con un Kind set di proprietà come indicato di seguito:

  • Unspecified, se non sono presenti informazioni sul fuso orario nella stringa di input.
  • Utc, se le informazioni sul fuso orario sono un oggetto finale Z.
  • Local, se le informazioni sul fuso orario vengono fornite come offset UTC finale, ad esempio +02:00. L'offset viene convertito correttamente nel fuso orario configurato dal chiamante. La formattazione di output predefinita non indica l'offset del fuso orario originale.

Il tipo PSObject gestisce l'ordine delle proprietà come presentato nella stringa JSON. A partire da PowerShell 7.3, il parametro AsHashtable crea una tabella OrderedHashtable. Le coppie chiave-valore vengono aggiunte nell'ordine presentato nella stringa JSON. La tabella OrderHashtable mantiene tale ordine.