Condividi tramite


ConvertFrom-Json

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

Sintassi

Default (Impostazione predefinita)

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 PSCustomObject personalizzato con una proprietà per ogni campo nella stringa JSON. JSON viene comunemente usato dai siti Web per fornire una rappresentazione testuale degli oggetti. Lo standard JSON non vieta l'utilizzo non consentito con un oggetto PSCustomObject. 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.

Annotazioni

A partire da PowerShell 6, questo cmdlet supporta JSON con commenti. I commenti accettati iniziano con due barre (//). Il commento non sarà rappresentato nei dati e può essere scritto nel file senza danneggiare i dati o generare un errore come in PowerShell 5.1.

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    : 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 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 JsonFile.JSON | ConvertFrom-Json

Il comando usa Get-Content cmdlet per ottenere le stringhe in un file 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: 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. Esistono diversi scenari in cui può superare alcune limitazioni del cmdlet ConvertFrom-Json.

  • Se il codice JSON contiene un elenco con chiavi che differiscono solo per la combinazione di maiuscole e minuscole. Senza l'interruttore, quei tasti sarebbero visti come chiavi identiche e quindi solo l'ultimo verrebbe utilizzato.
  • Se il codice JSON contiene una chiave, si tratta di una stringa vuota. Senza l'opzione, il cmdlet genererebbe un errore poiché a PSCustomObject non lo consente, ma una tabella hash lo consente. Un esempio di caso d'uso in cui ciò può verificarsi sono project.lock.json i file.
  • Le tabelle hash possono essere elaborate più rapidamente per determinate strutture di dati.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:False
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Depth

Ottiene o imposta la profondità massima consentita per l'input JSON. Per impostazione predefinita, è 1024.

Questo parametro è stato introdotto in PowerShell 6.2.

Proprietà dei parametri

Tipo:Int32
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti: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

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:0
Obbligatorio:True
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-NoEnumerate

Specifica che l'output non viene 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.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:False
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

CommonParameters

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.

Input

String

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

Output

PSCustomObject

Hashtable

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 di [datetime] con una proprietà Kind impostata nel modo seguente:

  • Unspecified, se non sono presenti informazioni sul fuso orario nella stringa di input.
  • Utcse le informazione sul fuso orario sono alla fine di Z.
  • Local, se le informazioni sul fuso orario vengono fornite come offset UTC finale come +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.