ConvertFrom-Json

Convertit une chaîne au format JSON en objet personnalisé ou une table de hachage.

Syntaxe

Default (Par défaut)

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

Description

L’applet de commande ConvertFrom-Json convertit une chaîne au format JSON (JavaScript Object Notation) en objet personnalisé PSCustomObject qui a une propriété pour chaque champ de la chaîne JSON. JSON est couramment utilisé par les sites web pour fournir une représentation textuelle des objets. La norme JSON n’interdit pas l’utilisation qui est interdite avec un PSCustomObject. 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 d’un objet, utilisez l’applet de commande ConvertTo-Json.

Cette applet de commande a été introduite dans PowerShell 3.0.

Remarque

À partir de PowerShell 6, cette applet de commande prend en charge JSON avec des commentaires. Les commentaires acceptés sont commençant par deux barres obliques (//). Le commentaire ne sera pas représenté dans les données et peut être écrit dans le fichier sans corrompre les données ou générer une erreur comme c’était le cas dans PowerShell 5.1.

Exemples

Exemple 1 : Convertir un objet DateTime en objet JSON

Cette commande utilise les applets de commande ConvertTo-Json et ConvertFrom-Json pour convertir un objet DateTime à partir de l’applet de commande Get-Date en objet JSON, puis en 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 de commande Select-Object pour obtenir toutes les propriétés de l’objet DateTime. Il utilise l’applet de commande ConvertTo-Json pour convertir l’objet DateTime en chaîne mise en forme en tant qu’objet JSON et l’applet de commande ConvertFrom-Json 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 de commande Invoke-WebRequest pour obtenir des chaînes JSON à partir d’un service web, puis elle utilise l’applet de commande ConvertFrom-Json pour convertir du contenu JSON en objets pouvant ê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 Invoke-RestMethod, qui convertit automatiquement le contenu JSON en objets.

Exemple 3 : Convertir une chaîne JSON en objet personnalisé

Cet exemple montre comment utiliser l’applet de commande ConvertFrom-Json pour convertir un fichier JSON en objet personnalisé PowerShell.

Get-Content JsonFile.JSON | ConvertFrom-Json

La commande utilise Get-Content applet de commande pour obtenir les chaînes dans un fichier JSON. Ensuite, il utilise l’opérateur de pipeline pour envoyer la chaîne délimitée à l’applet de commande ConvertFrom-Json, qui la convertit en objet personnalisé.

Exemple 4 : Convertir une chaîne JSON en table de hachage

Cette commande montre un exemple où le commutateur -AsHashtable peut surmonter les limitations de la commande.

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

La chaîne JSON contient deux paires clé-valeur dont les clés ne diffèrent que par la casse. Sans le commutateur, la commande aurait généré une erreur.

Exemple 5 : Conversion d'un tableau à un seul élément

Cette commande montre un exemple où le commutateur -NoEnumerate est utilisé pour aller-retour sur un tableau JSON d’un seul élément.

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, convertir le JSON en objet PSObject et puis le reconvertir avec la commande ConvertTo-Json résulte en un entier unique.

Paramètres

-AsHashtable

Convertit le JSON en objet de table de hachage. Ce commutateur a été introduit dans PowerShell 6.0. Il existe plusieurs scénarios où il peut surmonter certaines limitations de l’applet de commande ConvertFrom-Json.

  • Si le JSON contient une liste avec des clés qui ne diffèrent que par la casse. Sans l’interrupteur, ces touches seraient considérées comme des touches identiques et donc seules les dernières seraient utilisées.
  • Si le JSON contient une clé qui est une chaîne vide. Sans le commutateur, l’applet de commande générerait une erreur puisque a PSCustomObject ne le permet pas, mais qu’une table de hachage le permet. Les fichiers sont un exemple de cas d’utilisation où cela peut se produire project.lock.json .
  • Les tables de hachage peuvent être traitées plus rapidement pour certaines structures de données.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:False
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-Depth

Obtient ou définit la profondeur maximale que l’entrée JSON est autorisée à avoir. Par défaut, il s’agit de 1024.

Ce paramètre a été introduit dans PowerShell 6.2.

Propriétés du paramètre

Type:Int32
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-InputObject

Spécifie les chaînes JSON à convertir en objets JSON. Entrez une variable qui contient la chaîne, ou tapez une commande ou une expression qui obtient la chaîne. Vous pouvez également rediriger 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.

Propriétés du paramètre

Type:String
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:0
Obligatoire:True
Valeur du pipeline:True
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants: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 acheminé via ConvertTo-Json.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:False
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

CommonParameters

Cette applet de commande prend en charge les paramètres courants : -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction et -WarningVariable. Pour plus d’informations, consultez about_CommonParameters.

Entrées

String

Vous pouvez diriger une chaîne JSON vers ConvertFrom-Json.

Sorties

PSCustomObject

Hashtable

Notes

Cette applet de commande est implémentée à l’aide de Newtonsoft Json.NET.

À compter de PowerShell 6, ConvertTo-Json tente de convertir des chaînes formatées en tant qu'horodatages en valeurs de type DateTime. La valeur convertie est une instance de [datetime] avec une propriété Kind définie comme suit :

  • Unspecified, s’il n’existe aucune information de fuseau horaire dans la chaîne d’entrée.
  • UtcSi l'information sur le fuseau horaire est un Z de fin,
  • Local, si les informations relatives au fuseau horaire sont données sous la forme d'un décalage UTC de fin, comme +02:00. Le décalage est correctement converti dans le fuseau horaire configuré de l'appelant. Le formatage de sortie par défaut n’indique pas le décalage de fuseau horaire d’origine.