Literales de cadena en JQ usando PowerShell [duplicado]
No puedo hacer que los literales de cadena JQ funcionen desde Powershell. Por ejemplo, esto genera un bonito objeto JSON en Bash, pero falla en Powershell:
PS C:\temp> jq --null-input '{"key":"val"}'
jq: error: val/0 is not defined at <top-level>, line 1:
{key:val}
jq: 1 compile error
Al principio sospeché que las citas eran incorrectas, pero los Write-Output '{"key":"val"}'
resultados {"key":"val"}
son los que esperaba.
Puedo solucionarlo escribiendo mi filtro JQ en un archivo. El uso de .NET WriteAllText
garantiza que el archivo se codifique como UTF-8 sin BOM.
PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
"key": "val"
}
Estoy buscando un enfoque más ágil para crear prototipos de filtros JQ e integrarlos en scripts de PowerShell.
Versiones: JQ 1.6 para win64, PSVersion 5.1.18362.1171
Respuestas
Es posible que Powershell quiera que escape las comillas dobles dentro de la '..'
expresión. Tratar
jq --null-input '{ "key": \"val\" }'
o justo debajo, ya que los nombres clave en jq
no necesitan una cita explícita
jq --null-input '{ key: \"val\" }'
Desde el jq
manual debajo - Invocando jq
Cuando use el shell de comandos de Windows (
cmd.exe
), es mejor usar comillas dobles alrededor de su programa jq cuando se indique en la línea de comandos (en lugar de la-f program-file
opción), pero luego las comillas dobles en el programa jq necesitan una barra invertida de escape.