Literais de string em JQ usando PowerShell [duplicado]
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 WriteAllText
garante 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
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 jq
não precisam de uma citação explícita
jq --null-input '{ key: \"val\" }'
Do jq
manual 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-file
opção), mas as aspas duplas no programa jq precisam de escape de barra invertida.