String-Literale in JQ mit PowerShell [Duplikat]

Nov 30 2020

Ich kann JQ-String-Literale nicht von Powershell zum Laufen bringen. Dies gibt beispielsweise ein hübsches JSON-Objekt in Bash aus, schlägt jedoch in Powershell fehl:

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

Zuerst habe ich zitiere falsch vermutet, aber Write-Output '{"key":"val"}'Ausgänge {"key":"val"}als würde ich erwarten.

Ich kann das umgehen, indem ich meinen JQ-Filter in eine Datei schreibe. Durch die Verwendung von .NET wird WriteAllTextsichergestellt, dass die Datei ohne Stückliste als UTF-8 codiert wird.

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

Ich suche nach einem flexibleren Ansatz für das Prototyping von JQ-Filtern und deren Integration in PowerShell-Skripte.

Versionen: JQ 1.6 für win64, PSVersion 5.1.18362.1171

Antworten

1 Inian Nov 30 2020 at 21:20

Powershell möchte möglicherweise, dass Sie den doppelten Anführungszeichen im '..'Ausdruck entkommen . Versuchen

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

oder einfach unten, da die Schlüsselnamen in jqkein explizites Zitat benötigen

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

Aus dem jqHandbuch unter - Aufrufen von jq

Wenn Sie die Windows-Befehlsshell ( cmd.exe) verwenden, verwenden Sie am besten doppelte Anführungszeichen um Ihr jq-Programm, wenn diese in der Befehlszeile angegeben werden (anstelle der -f program-fileOption). Doppelte Anführungszeichen im jq-Programm müssen jedoch mit einem umgekehrten Schrägstrich versehen werden.