Literały ciągów w JQ przy użyciu programu PowerShell [duplikat]
Nie mogę uruchomić literałów ciągów JQ z programu PowerShell. Na przykład wyprowadza ładny obiekt JSON w Bash, ale kończy się niepowodzeniem w programie 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
Początkowo podejrzewałem nieprawidłowe cytowanie, ale Write-Output '{"key":"val"}'
wyniki są {"key":"val"}
zgodne z oczekiwaniami.
Mogę obejść ten problem, zapisując mój filtr JQ w pliku. Użycie .NET WriteAllText
gwarantuje, że plik zostanie zakodowany jako UTF-8 bez BOM.
PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
"key": "val"
}
Szukam bardziej zwinnego podejścia do prototypowania filtrów JQ i integracji ich w skryptach PowerShell.
Wersje: JQ 1.6 dla win64, PSVersion 5.1.18362.1171
Odpowiedzi
Powershell może chcieć, abyś uniknął podwójnych cudzysłowów wewnątrz '..'
wyrażenia. Próbować
jq --null-input '{ "key": \"val\" }'
lub tuż poniżej, ponieważ nazwy kluczy w jq
nie wymagają wyraźnego cudzysłowu
jq --null-input '{ key: \"val\" }'
Z jq
instrukcji pod - Invoking jq
Podczas korzystania z powłoki poleceń systemu Windows (
cmd.exe
) najlepiej jest używać podwójnych cudzysłowów wokół programu jq, gdy jest on podawany w wierszu poleceń (zamiast-f program-file
opcji), ale wtedy podwójne cudzysłowy w programie jq wymagają użycia znaku ucieczki odwrotnym ukośnikiem.