ConvertFrom-Json
Convierte una cadena con formato JSON en un objeto personalizado o en una tabla hash.
Sintaxis
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
El ConvertFrom-Json
cmdlet convierte una cadena con formato de notación de objetos JavaScript (JSON) en un objeto PSObject o Hashtable personalizado que tiene una propiedad para cada campo de la cadena JSON.
JSON se usa habitualmente en sitios web para proporcionar una representación textual de objetos. El cmdlet agrega las propiedades al nuevo objeto a medida que procesa cada línea de la cadena JSON.
El estándar JSON permite nombres de clave duplicados, que están prohibidos en tipos PSObject y Hashtable . 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 ConvertTo-Json
cmdlet .
Este cmdlet se introdujo en PowerShell 3.0.
Nota:
A partir de PowerShell 6, el cmdlet admite JSON con comentarios. Los comentarios JSON comienzan con dos caracteres de barra diagonal (//
). El cmdlet no captura los comentarios JSON en la salida de los objetos. Antes de PowerShell 6, ConvertFrom-Json
devolvería un error al encontrar un comentario JSON.
Ejemplos
Ejemplo 1: Convertir un objeto DateTime en un objeto JSON
Este comando usa los ConvertTo-Json
cmdlets y ConvertFrom-Json
para convertir un objeto DateTime del Get-Date
cmdlet en un objeto JSON y, a continuación, 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
En el ejemplo se usa el Select-Object
cmdlet para obtener todas las propiedades del objeto DateTime . Usa el ConvertTo-Json
cmdlet para convertir el objeto DateTime en una cadena con formato json y el ConvertFrom-Json
cmdlet 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 Invoke-WebRequest
cmdlet para obtener cadenas JSON de un servicio web y, a continuación, usa el ConvertFrom-Json
cmdlet 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 Invoke-RestMethod
cmdlet , 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 ConvertFrom-Json
cmdlet para convertir un archivo JSON en un objeto personalizado de PowerShell.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
El comando usa el cmdlet Get-Content para obtener las cadenas en un archivo JSON. El parámetro Raw devuelve todo el archivo como un único objeto JSON. A continuación, usa el operador de canalización para enviar la cadena delimitada al ConvertFrom-Json
cmdlet , 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 -AsHashtable
modificador 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 modificador, 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 -NoEnumerate
modificador 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 modificador, la conversión del JSON en un PSObject y, a continuación, convertirlo de nuevo con el ConvertTo-Json
comando da como resultado un único entero.
Parámetros
-AsHashtable
Convierte el JSON en un objeto de tabla hash. Este modificador se introdujo en PowerShell 6.0. A partir de PowerShell 7.3, el objeto es una tabla OrderedHashtable y conserva el orden de las claves del JSON. En versiones anteriores, el objeto es una tabla Hash.
Hay varios escenarios en los que puede superar algunas limitaciones del ConvertFrom-Json
cmdlet.
- Sin este modificador, cuando dos o más claves de un objeto JSON no distinguen mayúsculas de minúsculas, se tratan como claves idénticas. En ese caso, solo se incluye en el objeto convertido el último de las claves que no distinguen mayúsculas de minúsculas.
- Sin este modificador, el cmdlet produce un error cada vez que el JSON contiene una clave que es una cadena vacía. PSCustomObject no puede tener nombres de propiedad que sean cadenas vacías. Por ejemplo, esto puede ocurrir en
project.lock.json
archivos. - Las tablas hash se pueden procesar más rápido para determinadas estructuras de datos.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Depth
Obtiene o establece la profundidad máxima que tiene la entrada JSON. El valor predeterminado es 1024.
Este parámetro se introdujo en PowerShell 6.2.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-InputObject
Especifica las cadenas JSON que se van a convertir en objetos JSON. Escriba una variable que contenga la cadena, o un comando o una expresión que obtengan 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. El valor InputObject no puede ser $null
.
Tipo: | String |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-NoEnumerate
Especifica que la salida no está enumerada.
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 recorrer de ida y vuelta a través ConvertTo-Json
de .
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar una cadena JSON a ConvertFrom-Json
.
Salidas
PSCustomObject
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 DateTime . El valor convertido es una [datetime]
instancia con una Kind
propiedad 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 finalZ
.Local
, si la información de zona horaria se proporciona como un desplazamiento UTC final, como+02:00
. El desplazamiento se convierte correctamente en la zona horaria configurada del autor de la llamada. El formato de salida predeterminado no indica el desplazamiento de zona horaria original.
El tipo PSObject mantiene el orden de las propiedades tal como se muestra en la cadena JSON. A partir de PowerShell 7.3, el parámetro AsHashtable crea una tabla OrderedHashtable. Los pares clave-valor se agregan en el orden presentado en la cadena JSON. La tabla OrderedHashtable conserva ese orden.