Literais de string em JQ usando PowerShell [duplicado]

Nov 30 2020

Não consigo fazer com que os literais de string JQ funcionem no Powershell. Por exemplo, isso gera um belo objeto JSON no Bash, mas falha no 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

No início, suspeitei de citações incorretas, mas os Write-Output '{"key":"val"}'resultados foram {"key":"val"}como eu esperava.

Posso contornar isso escrevendo meu filtro JQ em um arquivo. O uso do .NET WriteAllTextgarante que o arquivo seja codificado como UTF-8 sem BOM.

PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
  "key": "val"
}

Estou procurando uma abordagem mais ágil para prototipar filtros JQ e integrá-los em scripts do PowerShell.

Versões: JQ 1.6 para win64, PSVersion 5.1.18362.1171

Respostas

1 Inian Nov 30 2020 at 21:20

O PowerShell pode querer que você evite as aspas duplas dentro da '..'expressão. Experimentar

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

ou logo abaixo, pois os nomes-chave jqnão precisam de uma citação explícita

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

Do jqmanual em - Invocando jq

Ao usar o shell de comando do Windows ( cmd.exe), é melhor usar aspas duplas em torno de seu programa jq quando fornecido na linha de comando (ao invés da -f program-fileopção), mas as aspas duplas no programa jq precisam de escape de barra invertida.