Literales de cadena en JQ usando PowerShell [duplicado]

Nov 30 2020

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 WriteAllTextgarantiza 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

1 Inian Nov 30 2020 at 21:20

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 jqno necesitan una cita explícita

jq --null-input '{ key: \"val\" }'

Desde el jqmanual 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-fileopción), pero luego las comillas dobles en el programa jq necesitan una barra invertida de escape.