ConvertFrom-Json
Converte una stringa in formato JSON in un oggetto personalizzato o in una tabella hash.
Sintassi
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Descrizione
Il cmdlet ConvertFrom-Json
converte una stringa formattata in JSON (JavaScript Object Notation) in un oggetto PSObject personalizzato o un oggetto Hashtable che ha una proprietà per ogni campo nella stringa JSON.
JSON viene comunemente usato dai siti Web per fornire una rappresentazione testuale degli 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 in PSObject e tipi di 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 cmdlet ConvertTo-Json
.
Questo cmdlet è stato introdotto in PowerShell 3.0.
Nota
In Windows PowerShell 5.1, ConvertFrom-Json
restituiva un errore quando rilevava un commento JSON. In PowerShell 6 e versioni successive il cmdlet supporta JSON con commenti. I commenti JSON non vengono inclusi negli oggetti prodotti dal cmdlet. Per ulteriori informazioni, vedere la sezione commenti JSON dell'articolo about_Comments.
Esempio
Esempio 1: Convertire un oggetto DateTime in un oggetto JSON
Questo comando usa i cmdlet ConvertTo-Json
e ConvertFrom-Json
per convertire un oggetto DateTime dal cmdlet Get-Date
a un oggetto JSON e quindi in un 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
Nell'esempio viene utilizzato il cmdlet Select-Object
per ottenere tutte le proprietà dell'oggetto DateTime. Usa il cmdlet ConvertTo-Json
per convertire l'oggetto DateTime in una stringa formattata come oggetto JSON e il cmdlet ConvertFrom-Json
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 cmdlet Invoke-WebRequest
per ottenere stringhe JSON da un servizio Web e quindi usa il cmdlet ConvertFrom-Json
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 Invoke-RestMethod
, che converte automaticamente il contenuto JSON in oggetti .
Esempio 3: Convertire una stringa JSON in un oggetto personalizzato
Questo esempio illustra come usare il cmdlet ConvertFrom-Json
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 cmdlet ConvertFrom-Json
, 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 maiuscole e minuscole. Senza l'opzione, il comando avrebbe generato un errore.
Esempio 5: Conversione di andata e ritorno di un array con un singolo elemento
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 nuovamente con il comando ConvertTo-Json
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 è un OrderedHashtable e mantiene l'ordinamento delle chiavi dal codice JSON. Nelle versioni precedenti, l'oggetto è un Hashtable.
Esistono diversi scenari in cui può superare alcune limitazioni del cmdlet ConvertFrom-Json
.
- 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, questo può verificarsi nei file
project.lock.json
. - Le tabelle hash possono essere elaborate più rapidamente per determinate strutture di dati.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-DateKind
Specifica il metodo usato durante l'analisi dei valori di data e ora nella stringa JSON. I valori accettabili per questo parametro sono:
Default
Local
Utc
Offset
String
Per informazioni su come questi valori influiscono sulla conversione, vedere i dettagli nella NOTES.
Questo parametro è stato introdotto in PowerShell 7.5.
Tipo: | Microsoft.PowerShell.Commands.JsonDateKind |
Valori accettati: | Default, Local, Utc, Offset, String |
Posizione: | Named |
Valore predefinito: | Default |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | 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.
Tipo: | Int32 |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputObject
Specifica le stringhe JSON da convertire in oggetti JSON. Immettere una variabile contenente la stringa oppure 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
.
Tipo: | String |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-NoEnumerate
Specifica che l'output non è enumerato.
L'impostazione di questo parametro determina l'invio delle matrici come singolo oggetto anziché l'invio separato di ogni elemento. Ciò garantisce che JSON possa essere arrotondato tramite ConvertTo-Json
.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | 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.
PowerShell 7.5 ha aggiunto il parametro DateKind, che consente di controllare la modalità di conversione della stringa di timestamp. Il parametro accetta i valori seguenti:
-
Default
: converte il timestamp in un'istanza di[datetime]
in base alle regole seguenti:- Se nella stringa di input non sono presenti informazioni sul fuso orario, il serializzatore Json.NET converte il valore come valore di ora non specificato.
- Se le informazioni sul fuso orario sono un
Z
finale , il serializzatore Json.NET converte il timestamp in un valore UTC. - Se il timestamp include un offset UTC come
+02:00
, l'offset viene convertito nel fuso orario configurato del chiamante. La formattazione di output predefinita non indica l'offset del fuso orario originale.
-
Local
: converte il timestamp in un'istanza di[datetime]
nel tempo locale di . Se il timestamp include un offset UTC, l'offset viene convertito nel fuso orario configurato dal chiamante. La formattazione di output predefinita non indica l'offset del fuso orario originale. -
Utc
: converte il valore in un'istanza di[datetime]
in UTC. -
Offset
: converte il timestamp in un'istanza di[DateTimeOffset]
, mantenendo l'offset del fuso orario della stringa originale in quell'istanza. Se la stringa non elaborata non contiene un offset di fuso orario, il valore DateTimeOffset verrà specificato nel fuso orario locale. -
String
: mantiene il valore dell'istanza di[string]
. In questo modo si garantisce che qualsiasi logica di analisi personalizzata possa essere applicata al valore della stringa non elaborata.
Il tipo di PSObject mantiene l'ordine delle proprietà come presentato nella stringa JSON. A partire da PowerShell 7.3, il parametro AsHashtable crea un OrderedHashtable. Le coppie chiave-valore vengono aggiunte nell'ordine presentato nella stringa JSON. Il OrderedHashtable mantiene tale ordine.