String-Literale in JQ mit PowerShell [Duplikat]
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 WriteAllText
sichergestellt, 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
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 jq
kein explizites Zitat benötigen
jq --null-input '{ key: \"val\" }'
Aus dem jq
Handbuch 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-file
Option). Doppelte Anführungszeichen im jq-Programm müssen jedoch mit einem umgekehrten Schrägstrich versehen werden.