PowerShell kullanarak JQ'da dize değişmez değerleri [duplicate]

Nov 30 2020

Powershell'den çalışmak için JQ dize değişmezlerini alamıyorum. Örneğin, bu Bash'de güzel bir JSON nesnesi oluşturur, ancak Powershell'de başarısız olur:

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

İlk başta yanlış alıntıdan şüphelendim, ancak beklediğim gibi Write-Output '{"key":"val"}'çıktılar {"key":"val"}.

JQ filtremi bir dosyaya yazarak bunun üstesinden gelebilirim. .NET kullanılması WriteAllText, dosyanın BOM olmadan UTF-8 olarak kodlanmasını sağlar.

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

JQ filtrelerinin prototipini oluşturmak ve bunları PowerShell betiklerine entegre etmek için daha çevik bir yaklaşım arıyorum.

Sürümler: Win64 için JQ 1.6, PSVersion 5.1.18362.1171

Yanıtlar

1 Inian Nov 30 2020 at 21:20

Powershell, '..'ifadenin içindeki çift tırnaktan kaçmanızı isteyebilir . Deneyin

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

veya anahtar adlarının jqaçık bir alıntı gerektirmediğinden hemen altında

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

Gönderen jqkılavuzu under - çağırma JQ

Windows komut kabuğunu ( cmd.exe) kullanırken, jq programınızda komut satırında verildiğinde ( -f program-fileseçenek yerine ) çift ​​tırnak kullanmak en iyisidir , ancak daha sonra jq programındaki çift tırnakların ters eğik çizgiden kaçması gerekir.