PowerShellを使用したJQの文字列リテラル[重複]
Nov 30 2020
PowershellからJQ文字列リテラルを機能させることができません。たとえば、これはBashできれいなJSONオブジェクトを出力しますが、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
最初は間違った引用を疑っていましたが、期待どおりにWrite-Output '{"key":"val"}'
出力さ{"key":"val"}
れました。
JQフィルターをファイルに書き込むことで回避できます。.NETWriteAllText
を使用すると、ファイルはBOMなしでUTF-8としてエンコードされます。
PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
"key": "val"
}
JQフィルターのプロトタイピングを行い、PowerShellスクリプトに統合するためのより機敏なアプローチを探しています。
バージョン:win64用のJQ 1.6、PSVersion 5.1.18362.1171
回答
1 Inian Nov 30 2020 at 21:20
Powershellでは、'..'
式内の二重引用符をエスケープする必要がある場合があります。試してみてください
jq --null-input '{ "key": \"val\" }'
または、キー名はjq
明示的な引用符を必要としないため、すぐ下にあります
jq --null-input '{ key: \"val\" }'
jq
以下のマニュアルから-jqの呼び出し
Windowsコマンドシェル(
cmd.exe
)を使用する場合、コマンドラインで指定する-f program-file
場合は(オプションではなく)jqプログラムを二重引用符で囲むのが最善ですが、jqプログラムで二重引用符を使用するには円記号をエスケープする必要があります。