ConvertFrom-Json
Convertit une chaîne au format JSON en objet personnalisé ou en table de hachage.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
L’applet ConvertFrom-Json
de commande convertit une chaîne au format JSON (JavaScript Object Notation) en objet PSObject ou Hashtable personnalisé qui a une propriété pour chaque champ dans la chaîne JSON.
JSON est couramment utilisé par les sites web pour fournir une représentation textuelle des objets. L’applet de commande ajoute les propriétés au nouvel objet pendant qu’elle traite chaque ligne de la chaîne JSON.
La norme JSON autorise les noms de clés en double, qui sont interdits dans les types PSObject et Hashtable . Par exemple, si la chaîne JSON contient des clés en double, seule la dernière clé est utilisée par cette applet de commande. Consultez d’autres exemples ci-dessous.
Pour générer une chaîne JSON à partir de n’importe quel objet, utilisez l’applet de ConvertTo-Json
commande .
Cette applet de commande a été introduite dans PowerShell 3.0.
Notes
À compter de PowerShell 6, l’applet de commande prend en charge JSON avec des commentaires. Les commentaires JSON commencent par deux barres obliques (//
) caractères. Les commentaires JSON ne sont pas capturés dans les objets générés par l’applet de commande. Avant PowerShell 6, ConvertFrom-Json
renvoyait une erreur lorsqu’il rencontrait un commentaire JSON.
Exemples
Exemple 1 : Convertir un objet DateTime en objet JSON
Cette commande utilise les ConvertTo-Json
applets de commande et ConvertFrom-Json
pour convertir un objet DateTime de l’applet Get-Date
de commande en objet JSON, puis en un OBJET 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
L’exemple utilise l’applet Select-Object
de commande pour obtenir toutes les propriétés de l’objet DateTime . Il utilise l’applet ConvertTo-Json
de commande pour convertir l’objet DateTime en chaîne mise en forme en tant qu’objet JSON et l’applet ConvertFrom-Json
de commande pour convertir la chaîne au format JSON en objet PSCustomObject .
Exemple 2 : Obtenir des chaînes JSON à partir d’un service web et les convertir en objets PowerShell
Cette commande utilise l’applet Invoke-WebRequest
de commande pour obtenir des chaînes JSON à partir d’un service web, puis elle utilise l’applet de commande pour convertir le ConvertFrom-Json
contenu JSON en objets qui peuvent être gérés dans 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
Vous pouvez également utiliser l’applet de commande, qui convertit automatiquement le Invoke-RestMethod
contenu JSON en objets.
Exemple 3 : Convertir une chaîne JSON en objet personnalisé
Cet exemple montre comment utiliser l’applet de ConvertFrom-Json
commande pour convertir un fichier JSON en objet personnalisé PowerShell.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
La commande utilise Get-Content applet de commande pour obtenir les chaînes d’un fichier JSON. Le paramètre Raw retourne l’ensemble du fichier sous la forme d’un seul objet JSON. Ensuite, il utilise l’opérateur de pipeline pour envoyer la chaîne délimitée à l’applet de commande, qui la ConvertFrom-Json
convertit en objet personnalisé.
Exemple 4 : Convertir une chaîne JSON en table de hachage
Cette commande montre un exemple où le -AsHashtable
commutateur peut surmonter les limitations de la commande.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
La chaîne JSON contient deux paires de valeurs de clé avec des clés qui diffèrent uniquement par la casse. Sans le commutateur, la commande aurait lève une erreur.
Exemple 5 : Aller-retour d’un tableau d’éléments unique
Cette commande montre un exemple où le -NoEnumerate
commutateur est utilisé pour aller-retour d’un tableau JSON à élément unique.
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 chaîne JSON contient un tableau avec un seul élément. Sans le commutateur, la conversion du JSON en PSObject, puis sa conversion à l’aide de la ConvertTo-Json
commande aboutit à un seul entier.
Paramètres
-AsHashtable
Convertit le JSON en objet table de hachage. Ce commutateur a été introduit dans PowerShell 6.0. À compter de PowerShell 7.3, l’objet est orderHashtable et conserve l’ordre des clés à partir du JSON. Dans les versions antérieures, l’objet est une table de hachage.
Il existe plusieurs scénarios dans lesquels il peut surmonter certaines limitations de l’applet ConvertFrom-Json
de commande.
- Sans ce commutateur, lorsque deux clés ou plus d’un objet JSON ne respectent pas la casse, elles sont traitées comme des clés identiques. Dans ce cas, seule la dernière de ces clés identiques respectant la casse est incluse dans l’objet converti.
- Sans ce commutateur, l’applet de commande génère une erreur chaque fois que le JSON contient une clé qui est une chaîne vide. PSCustomObject ne peut pas avoir de noms de propriétés qui sont des chaînes vides. Par exemple, cela peut se produire dans des
project.lock.json
fichiers. - Les tables de hachage peuvent être traitées plus rapidement pour certaines structures de données.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
Obtient ou définit la profondeur maximale que l’entrée JSON est autorisée à avoir. La valeur par défaut est 1024.
Ce paramètre a été introduit dans PowerShell 6.2.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Spécifie les chaînes JSON à convertir en objets JSON. Entrez une variable contenant la chaîne, ou tapez une commande ou une expression qui obtient la chaîne. Vous pouvez également diriger une chaîne vers ConvertFrom-Json
.
Le paramètre InputObject est obligatoire, mais sa valeur peut être une chaîne vide. Lorsque l’objet d’entrée est une chaîne vide, ConvertFrom-Json
ne génère aucune sortie. La valeur InputObject ne peut pas être $null
.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
Spécifie que la sortie n’est pas énumérée.
La définition de ce paramètre entraîne l’envoi de tableaux en tant qu’objet unique au lieu d’envoyer chaque élément séparément. Cela garantit que JSON peut être aller-retour via ConvertTo-Json
.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Vous pouvez diriger une chaîne JSON vers ConvertFrom-Json
.
Sorties
PSCustomObject
Notes
Cette applet de commande est implémentée à l’aide de newtonsoft Json.NET.
À partir de PowerShell 6, ConvertTo-Json
tente de convertir les chaînes mises en forme comme horodatage en valeurs DateTime . La valeur convertie est une [datetime]
instance avec une Kind
propriété définie comme suit :
Unspecified
, s’il n’y a pas d’informations de fuseau horaire dans la chaîne d’entrée.Utc
, si les informations de fuseau horaire sont une fin .Z
Local
, si les informations de fuseau horaire sont données sous la forme d’un décalage UTC de fin comme+02:00
. Le décalage est correctement converti en fuseau horaire configuré de l’appelant. La mise en forme de sortie par défaut n’indique pas le décalage horaire d’origine.
Le type PSObject conserve l’ordre des propriétés tel qu’il est présenté dans la chaîne JSON. À compter de PowerShell 7.3, le paramètre AsHashtable crée une commande OrderedHashtable. Les paires clé-valeur sont ajoutées dans l’ordre présenté dans la chaîne JSON. OrderHashtable conserve cet ordre.