PowerShell kullanarak JQ'da dize değişmez değerleri [duplicate]
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
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.