ConvertFrom-Json
Converte una stringa in formato 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 in formato 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 durante l'elaborazione di ogni riga della stringa JSON.
Lo standard JSON consente nomi di chiave duplicati, che non sono consentiti nei tipi hashtable di fine PSObject. 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 (//
). I commenti JSON non vengono acquisiti nell'output degli oggetti dal cmdlet . Prima di PowerShell 6, ConvertFrom-Json
restituirebbe un errore quando si è verificato 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 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 utilizzato 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 in formato JSON in un oggetto PSCustomObject .
Esempio 2: Ottenere stringhe JSON da un servizio Web e convertirle in oggetti di PowerShell
Questo comando usa il Invoke-WebRequest
cmdlet per ottenere stringhe JSON da un servizio Web e quindi usa il cmdlet per convertire il ConvertFrom-Json
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 Invoke-RestMethod
cmdlet , che converte automaticamente il contenuto JSON in oggetti .
Esempio 3: Convertire una stringa JSON in un oggetto personalizzato
Questo esempio illustra 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 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 chiave-valore con chiavi che differiscono solo in maiuscolo. 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 restituisce un singolo numero 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 OrderedHash e mantiene l'ordinamento delle chiavi dal codice JSON. Nelle versioni precedenti, l'oggetto è una tabella Hash.
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 non fanno distinzione tra maiuscole e minuscole, vengono considerate come chiavi identiche. In tal 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, ciò 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 |
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 |
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 tramite pipe una stringa a 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 |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
Specifica che l'output non è enumerato.
L'impostazione di questo parametro fa sì che le matrici vengano 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 |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
È possibile inviare tramite pipe una stringa JSON a ConvertFrom-Json
.
Output
PSCustomObject
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 set di Kind
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 oggettoZ
finale.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 del chiamante. La formattazione di output predefinita non indica la differenza di fuso orario originale.
Il tipo PSObject mantiene l'ordine delle proprietà, come illustrato 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. L'oggetto OrderedHashtable mantiene tale ordine.
Collegamenti correlati
Commenti e suggerimenti
Invia e visualizza il feedback per