ConvertFrom-Json
Convierte una cadena con formato JSON en un objeto personalizado o en una tabla hash.
Sintaxis
Default (valor predeterminado)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
El cmdlet ConvertFrom-Json convierte una cadena con formato de notación de objetos JavaScript (JSON) en un objeto PSCustomObject personalizado que tiene una propiedad para cada campo de la cadena JSON. Los sitios web suelen usar JSON para proporcionar una representación textual de los objetos. El estándar JSON no prohíbe el uso que está prohibido con un PSCustomObject. Por ejemplo, si la cadena JSON contiene claves duplicadas, este cmdlet usa solo la última clave. Vea otros ejemplos a continuación.
Para generar una cadena JSON a partir de cualquier objeto, use el cmdlet ConvertTo-Json.
Este cmdlet se introdujo en PowerShell 3.0.
Nota:
A partir de PowerShell 6, este cmdlet admite JSON con comentarios. Los comentarios aceptados se inician con dos barras diagonales (//). El comentario no se representará en los datos y se puede escribir en el archivo sin dañar los datos ni generar un error como lo hizo en PowerShell 5.1.
Ejemplos
Ejemplo 1: Convertir un objeto DateTime en un objeto JSON
Este comando usa los cmdlets ConvertTo-Json y ConvertFrom-Json para convertir un objeto DateTime del cmdlet Get-Date a un objeto JSON y, a continuación, a 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
En el ejemplo se usa el cmdlet Select-Object para obtener todas las propiedades del objeto DateTime. Usa el cmdlet ConvertTo-Json para convertir el objeto DateTime en una cadena con formato JSON y el cmdlet ConvertFrom-Json para convertir la cadena con formato JSON en un objeto PSCustomObject.
Ejemplo 2: Obtención de cadenas JSON de un servicio web y conversión a objetos de PowerShell
Este comando usa el cmdlet Invoke-WebRequest para obtener cadenas JSON de un servicio web y, a continuación, usa el cmdlet ConvertFrom-Json para convertir contenido JSON en objetos que se pueden administrar en 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
También puede usar el cmdlet Invoke-RestMethod, que convierte automáticamente el contenido JSON en objetos.
Ejemplo 3: Conversión de una cadena JSON en un objeto personalizado
En este ejemplo se muestra cómo usar el cmdlet ConvertFrom-Json para convertir un archivo JSON en un objeto personalizado de PowerShell.
Get-Content JsonFile.JSON | ConvertFrom-Json
El comando usa Get-Content cmdlet para obtener las cadenas en un archivo JSON. A continuación, usa el operador de canalización para enviar la cadena delimitada al cmdlet ConvertFrom-Json, que lo convierte en un objeto personalizado.
Ejemplo 4: Conversión de una cadena JSON en una tabla hash
Este comando muestra un ejemplo en el que el modificador -AsHashtable puede superar las limitaciones del comando.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
La cadena JSON contiene dos pares clave-valor con claves que solo difieren en mayúsculas y minúsculas. Sin el conmutador, el comando habría producido un error.
Ejemplo 5: Ida y vuelta de una sola matriz de elementos
Este comando muestra un ejemplo en el que el modificador -NoEnumerate se usa para realizar un recorrido de ida y vuelta de una matriz JSON de un solo elemento.
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 cadena JSON contiene una matriz con un solo elemento. Sin el switch, la conversión del JSON a un PSObject y luego convertirlo de nuevo con el comando ConvertTo-Json resulta en un único número entero.
Parámetros
-AsHashtable
Convierte el JSON en un objeto de tabla hash. Este interruptor se introdujo en PowerShell 6.0. Hay varios escenarios en los que puede superar algunas limitaciones del cmdlet ConvertFrom-Json.
- Si el JSON contiene una lista con claves que solo difieren en mayúsculas y minúsculas. Sin el interruptor, esas teclas se verían como llaves idénticas y, por lo tanto, solo se usaría la última.
- Si el JSON contiene una clave que es una cadena vacía. Sin el modificador, el cmdlet produciría un error, ya que a
PSCustomObjectno lo permite, pero una tabla hash sí. Un ejemplo de caso de uso en el que esto puede ocurrir sonproject.lock.jsonlos archivos. - Las tablas hash se pueden procesar más rápido para determinadas estructuras de datos.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | False |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Depth
Obtiene o establece la profundidad máxima permitida para la entrada JSON. De forma predeterminada, es 1024.
Este parámetro se introdujo en PowerShell 6.2.
Propiedades de parámetro
| Tipo: | Int32 |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-InputObject
Especifica las cadenas JSON que se van a convertir en objetos JSON. Escriba una variable que contenga la cadena o escriba un comando o expresión que obtenga la cadena. También puede canalizar una cadena a ConvertFrom-Json.
Se requiere el parámetro InputObject, pero su valor puede ser una cadena vacía. Cuando el objeto de entrada es una cadena vacía, ConvertFrom-Json no genera ninguna salida. No se puede el valor de $null .
Propiedades de parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | 0 |
| Obligatorio: | True |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-NoEnumerate
Especifica que no se enumera la salida.
Establecer este parámetro hace que las matrices se envíen como un único objeto en lugar de enviar cada elemento por separado. Esto garantiza que JSON se puede procesar ida y vuelta mediante ConvertTo-Json.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | False |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
String
Puede redirigir una cadena JSON a ConvertFrom-Json.
Salidas
PSCustomObject
Hashtable
Notas
Este cmdlet se implementa mediante Newtonsoft Json.NET.
A partir de PowerShell 6, ConvertTo-Json intenta convertir cadenas con formato de marcas de tiempo a valores de DateTime. El valor convertido es una instancia de [datetime] con una propiedad Kind establecida de la siguiente manera:
-
Unspecified, si no hay información de zona horaria en la cadena de entrada. -
Utc, si la información de zona horaria es unaZfinal. -
Local, si la información de la zona horaria se proporciona como una diferencia horaria con UTC final como+02:00. El desfase se convierte correctamente a la zona horaria configurada por el llamante. El formato de salida predeterminado no indica el desplazamiento de zona horaria original.