Cómo leer y procesar archivos JSON en PowerShell
Los archivos JSON están en todas partes: respuestas de APIs, archivos de configuración y exportaciones de datos. Saber cómo leer archivos JSON en PowerShell permite convertir ese texto en objetos que puede filtrar, modificar y volver a guardar, todo con cmdlets nativos y sin instalar nada. A continuación tiene el paso a paso completo, desde la carga del archivo hasta guardar el resultado.
Requisitos previos
- Windows PowerShell 5.1 o PowerShell 7+ (los cmdlets de JSON existen en ambos).
- Un archivo JSON de ejemplo guardado en el disco (usaremos
produtos.json). - Nociones básicas de la consola de PowerShell: abrir la ventana y ejecutar comandos.
Paso 1: Preparar un archivo JSON de ejemplo
Para seguir el ejemplo, cree un archivo llamado produtos.json en su carpeta de trabajo con algunos registros. Cada objeto representa un producto con nombre, precio y stock. Este será el archivo que vamos a leer y procesar.
[
{ "nome": "Teclado", "preco": 25.5, "stock": 12 },
{ "nome": "Rato", "preco": 15.0, "stock": 0 },
{ "nome": "Monitor", "preco": 199.9, "stock": 5 }
]
Paso 2: Leer el archivo con Get-Content y ConvertFrom-Json
El primer paso es leer el texto del archivo y convertirlo en objetos de PowerShell. Use Get-Content con el parámetro -Raw para leer el archivo entero como un único texto y envíe el resultado a ConvertFrom-Json.
$produtos = Get-Content -Path '.produtos.json' -Raw | ConvertFrom-Json
$produtos
El -Raw es importante: sin él, el archivo se lee línea a línea y ConvertFrom-Json puede fallar en archivos de varias líneas. Después de esta línea, $produtos es una colección de objetos que se comportan como cualquier objeto nativo; incluso puede ejecutar $produtos | Get-Member para ver las propiedades disponibles.
Consejo: si su JSON representa un único objeto (y no una lista), ConvertFrom-Json devuelve un solo objeto. En ese caso no necesita recorrer una colección; acceda directamente a las propiedades.
Paso 3: Acceder a propiedades y filtrar datos
Como ahora tiene objetos, puede acceder a cada campo con un punto. Por ejemplo, $produtos[0].nome devuelve el nombre del primer producto. Para filtrar, use Where-Object; en el ejemplo siguiente nos quedamos solo con los productos que todavía tienen stock.
# Todos los nombres
$produtos.nome
# Solo productos con stock disponible
$comStock = $produtos | Where-Object { $_.stock -gt 0 }
$comStock | Select-Object nome, preco
Dentro del filtro, $_ representa el objeto actual. Puede combinar condiciones con -and y -or y ordenar el resultado con Sort-Object preco, igual que haría en una consulta a una base de datos.
Paso 4: Modificar valores y guardar con ConvertTo-Json
Después de trabajar los datos, es habitual querer guardarlos de nuevo. Vamos a aplicar un descuento del 10% a cada precio y escribir el resultado en un archivo nuevo con ConvertTo-Json.
foreach ($p in $produtos) {
$p.preco = [math]::Round($p.preco - $p.preco / 10, 2)
}
$produtos |
ConvertTo-Json -Depth 5 |
Set-Content -Path '.produtos_com_desconto.json' -Encoding UTF8
Fíjese en el parámetro -Depth. De forma predeterminada, ConvertTo-Json solo convierte 2 niveles de profundidad; con datos anidados, aumentar el -Depth evita perder información. El -Encoding UTF8 garantiza que los acentos y caracteres especiales queden correctos en el archivo guardado.
Verificar el resultado
Para confirmar que todo salió bien, lea de nuevo el archivo generado y muestre los datos en una tabla. Si el número de productos y los precios con descuento aparecen como se esperaba, el procesamiento funcionó.
$verificar = Get-Content -Path '.produtos_com_desconto.json' -Raw | ConvertFrom-Json
$verificar | Format-Table nome, preco, stock
"Total de registos: $($verificar.Count)"
Debería ver la tabla con los tres productos y los precios ya reducidos. Si recibe un error de conversión, compruebe que el JSON es válido (llaves y comillas bien cerradas) y que usó -Raw al leer el archivo.
Conclusión
Con solo dos cmdlets — ConvertFrom-Json y ConvertTo-Json — PowerShell lee, transforma y guarda datos JSON sin ninguna herramienta externa. A partir de aquí puede enlazar estos pasos con llamadas a API, automatizar informes periódicos o preparar archivos para cargar en un Data Warehouse. ¿Cuál será el próximo archivo JSON que dejará de editar a mano?