I cannot get JQ string literals to work from Powershell. For example, this outputs a pretty JSON object in Bash, but fails in 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
At first I suspected incorrect quoting, but Write-Output '{"key":"val"}' outputs {"key":"val"} as I would expect.
I can work around it by writing my JQ filter into a file. Using .NET WriteAllText ensures the file gets encoded as UTF-8 without BOM.
PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
"key": "val"
}
I am looking for a more nimble approach for prototyping JQ filters and integrating them in PowerShell scripts.
Versions: JQ 1.6 for win64, PSVersion 5.1.18362.1171
Powershell might want you to escape the double-quotes inside the '..' expression. Try
jq --null-input '{ "key": \"val\" }'
or just below as the key names in jq don't need an explicit quote
jq --null-input '{ key: \"val\" }'
From the jq manual under - Invoking jq
When using the Windows command shell (
cmd.exe) it's best to use double quotes around your jq program when given on the command-line (instead of the-f program-fileoption), but then double-quotes in the jq program need backslash escaping.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With