Cómo escribir un objeto JSON en un archivo en PowerShell

  1. Objetos Personalizados de PowerShell
  2. Objeto JSON de PowerShell a Cadena JSON
  3. Guardar Cadena JSON en un Archivo Usando ConvertTo-Json y Out-File
  4. Guardar Cadena JSON en un Archivo Usando ConvertTo-Json y Set-Content
  5. Guardar Cadena JSON en un Archivo Usando ConvertTo-Json y Add-Content
  6. Conclusión
Cómo escribir un objeto JSON en un archivo en PowerShell

PowerShell, un lenguaje de scripting robusto y versátil, proporciona herramientas poderosas para gestionar y manipular datos. Cuando se trata de manejar datos JSON (Notación de Objetos de JavaScript), PowerShell ofrece formas eficientes de convertir objetos personalizados en cadenas JSON y, posteriormente, escribirlas en archivos.

En este artículo, profundizaremos en el proceso de conversión de objetos de PowerShell a cadenas JSON y guardarlas en archivos usando varios cmdlets como ConvertTo-Json, Out-File, Set-Content y Add-Content.

Objetos Personalizados de PowerShell

El PSCustomObject es un elemento fundamental en PowerShell utilizado para definir objetos personalizados. Un objeto personalizado contiene típicamente propiedades y sus valores asociados, proporcionando una forma estructurada de organizar datos.

Además de crear objetos personalizados desde cero, PowerShell también es hábil en el manejo y procesamiento eficiente de objetos JSON.

Creando un Objeto JSON Personalizado

Comencemos examinando cómo crear un objeto JSON personalizado utilizando una estructura JSON de ejemplo. Almacenaremos esta estructura JSON en la variable $MyJsonVar.

$MyJsonVar = @"
 {
   "ExampleJson":{
     "Fruit1":{
       "Name":"Apple",
       "Price":"`$10.00"
     }
  }
 }
"@

Salida:

Objetos personalizados de PowerShell 1

En este ejemplo, hemos definido una estructura JSON que representa información sobre frutas.

Convirtiendo JSON a Objeto Personalizado de PowerShell

Para convertir la representación JSON en un Objeto Personalizado de PowerShell, utilizamos el cmdlet ConvertFrom-JSON. Asignemos el nuevo objeto JSON creado a la variable $MyJsonObject.

$MyJsonObject = $MyJsonVar | ConvertFrom-Json

El cmdlet ConvertFrom-JSON transforma la estructura JSON en un PSCustomObject adecuado.

Mostrando el Objeto Personalizado de PowerShell Creado

Ahora, mostremos el PSCustomObject recién creado, que corresponde a la estructura JSON original.

$MyJsonObject

Salida:

Objetos Personalizados de PowerShell 3

Estos comandos acceden y muestran las propiedades de precio y nombre de la fruta definida en el objeto personalizado. Así, se ha confirmado que obtuvimos un objeto personalizado de PowerShell llamado $MyJsonObject.

Objeto JSON de PowerShell a Cadena JSON

PowerShell ofrece el cmdlet ConvertTo-Json, una herramienta valiosa para convertir un objeto personalizado existente en una cadena JSON. Este proceso transforma efectivamente el objeto en una representación de texto plano en formato JSON, que puede ser utilizada o almacenada según sea necesario.

Sintaxis del cmdlet ConvertTo-Json:

ConvertTo-Json
[-InputObject] <Object>
[-Depth <Int32>]
[-Compress]
[-EnumsAsStrings]
[-AsArray]
[-EscapeHandling <StringEscapeHandling>]
[<CommonParameters>]

El cmdlet ConvertTo-Json proporciona varios parámetros opcionales para personalizar el proceso de conversión a JSON. Aquí hay un desglose de estos parámetros:

  • -InputObject: Este parámetro es fundamental, ya que designa el objeto personalizado que requiere conversión a una cadena JSON. Puedes pasar el objeto directamente a este parámetro.

  • -Depth: Este parámetro crucial te permite especificar el número de niveles en la cadena JSON resultante. La profundidad indica cuántos niveles de objetos o arreglos anidados se incluirán en la cadena JSON.

    Sin embargo, debe ser utilizado con juicio, ya que un uso inadecuado puede llevar a la pérdida de datos. El valor predeterminado está configurado en 2.

  • -Compress: Este parámetro comprime la salida JSON al eliminar espacios en blanco innecesarios e identaciones, resultando en una cadena JSON más compacta.

  • -EnumsAsStrings: Cuando se usa, este parámetro representa los valores de enumeración como cadenas en la salida JSON, asegurando compatibilidad con sistemas que pueden no manejar adecuadamente enumeraciones numéricas.

  • -AsArray: Cuando se especifica, este parámetro formatea la salida como un arreglo JSON, incluso si el objeto de entrada no es un arreglo.

  • -EscapeHandling: Este parámetro permite personalizar cómo se escapan los caracteres especiales en la cadena JSON, proporcionando opciones como Default, EscapeNonAscii, EscapeHtml y DoNotEscape.

Para demostrar el uso del cmdlet ConvertTo-Json, consideremos el objeto personalizado en la sección anterior ($MyJsonObject):

Podemos encadenar un objeto personalizado al cmdlet ConvertTo-Json fácilmente. Podemos enviar el $MyJsonObject a través del pipe (|) para transformar el objeto personalizado en una cadena JSON.

$MyJsonObject | ConvertTo-Json

Salida:

Objeto JSON a cadena JSON

Demostremos además el uso del cmdlet ConvertTo-Json. Consideremos un objeto personalizado llamado $AnotherJsonObject:

$AnotherJsonObject = @{
    Name     = "John Doe"
    Age      = 30
    IsActive = $true
    Hobbies  = @("Reading", "Gardening")
    Address  = @{
        Street  = "1234 Elm St"
        City    = "Anytown"
        Country = "USA"
    }
}

Para convertir este objeto en una cadena JSON y mostrar la salida, usa el siguiente comando:

$AnotherJsonObject | ConvertTo-Json

La salida de esta transformación es una cadena JSON ilustrativa que representa el objeto personalizado original.

{
    "Name": "John Doe",
    "Age": 30,
    "IsActive": true,
    "Hobbies": [
        "Reading",
        "Gardening"
    ],
    "Address": {
        "Street": "1234 Elm St",
        "City": "Anytown",
        "Country": "USA"
    }
}

Como podemos ver, la salida muestra un objeto estructurado ($AnotherJsonObject) que representa información personal como nombre, edad, estado de actividad, pasatiempos y detalles de la dirección de una persona.

Guardar Cadena JSON en un Archivo Usando ConvertTo-Json y Out-File

Una vez que has obtenido una cadena JSON usando el cmdlet ConvertTo-Json en PowerShell, el siguiente paso lógico es guardarla en un archivo para su uso posterior o intercambio. Afortunadamente, PowerShell proporciona varios métodos para lograr esto, siendo uno de los más sencillos el uso de Out-File.

El cmdlet Out-File es una herramienta confiable para guardar la cadena JSON en un archivo. A continuación se muestra un ejemplo que ilustra cómo lograr esto:

$MyJsonObject | ConvertTo-Json | Out-File -FilePath "D:\path\to\example.json"

Salida:

Guardar cadena JSON en un archivo

En este ejemplo, $MyJsonObject representa la variable que contiene la cadena JSON generada usando ConvertTo-Json. El pipeline (|) pasa esta cadena JSON a Out-File para escribirla en un archivo.

El parámetro -FilePath especifica la ruta de destino para la cadena JSON. Simplemente reemplaza "D:\path\to\example.json" con la ruta de archivo deseada donde pretendes guardar el contenido JSON.

Al usar Out-File de esta manera, persistes de manera eficiente tus datos JSON en un archivo, haciéndolos accesibles para uso futuro o intercambio. Esta técnica simple pero poderosa es instrumental en la gestión efectiva de datos JSON dentro de un entorno PowerShell.

Guardar Cadena JSON en un Archivo Usando ConvertTo-Json y Set-Content

Otra forma de guardar la cadena JSON en un archivo es utilizando el cmdlet Set-Content. El cmdlet Set-Content proporciona una forma sencilla de escribir datos en un archivo, lo que lo convierte en una opción adecuada para guardar una cadena JSON en disco.

El siguiente ejemplo demuestra este proceso:

$MyJsonObject | ConvertTo-Json | Set-Content -Path "D:\path\to\example.json"

En este ejemplo, $MyJsonObject es la variable que contiene la cadena JSON generada usando ConvertTo-Json. El pipeline (|) pasa esta cadena JSON a Set-Content para escribirla en un archivo.

El parámetro -Path especifica la ruta de destino para la cadena JSON. Simplemente reemplaza "D:\path\to\example.json" con la ruta de archivo deseada donde pretendes guardar el contenido JSON.

Guardar Cadena JSON en un Archivo Usando ConvertTo-Json y Add-Content

Otro método que podemos usar para guardar una cadena JSON en un archivo en PowerShell es el cmdlet Add-Content, que permite agregar la cadena JSON a un archivo existente. El siguiente ejemplo demuestra cómo lograr esto:

$MyJsonObject | ConvertTo-Json | Add-Content -Path "D:\path\to\example.json"

En este ejemplo, $MyJsonObject representa la variable que contiene la cadena JSON generada usando ConvertTo-Json. El pipeline (|) pasa esta cadena JSON a Add-Content para agregarla a un archivo especificado por el parámetro -Path.

El parámetro -Path significa el archivo al que se añadirá la cadena JSON. Simplemente reemplaza "D:\path\to\example.json" con la ruta de archivo deseada donde pretendes agregar el contenido JSON.

El cmdlet Add-Content ofrece una forma conveniente de agregar o anexar contenido a un archivo sin sobrescribir los datos existentes. Esto es especialmente útil cuando se trabaja con cadenas JSON que necesitan ser actualizadas o ampliadas con el tiempo.

Conclusión

Este artículo ha demostrado el proceso de conversión de objetos de PowerShell a cadenas JSON y su almacenamiento en archivos utilizando el cmdlet ConvertTo-Json, junto con otros cmdlets de manejo de archivos como Out-File, Set-Content y Add-Content.

Al aprovechar estas herramientas, los usuarios pueden manejar datos JSON de manera eficiente, permitiendo una gestión de datos simplificada, intercambio e integración con diversas aplicaciones y sistemas.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

Artículo relacionado - PowerShell JSON