String literal di JQ menggunakan PowerShell [duplikat]
Saya tidak bisa mendapatkan literal string JQ untuk bekerja dari Powershell. Misalnya, ini menghasilkan objek JSON yang cantik di Bash, tetapi gagal di 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
Awalnya saya curiga kutipan salah, tetapi Write-Output '{"key":"val"}'
hasilnya {"key":"val"}
seperti yang saya harapkan.
Saya dapat mengatasinya dengan menulis filter JQ saya ke dalam sebuah file. Menggunakan .NET WriteAllText
memastikan file dikodekan sebagai UTF-8 tanpa BOM.
PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
"key": "val"
}
Saya mencari pendekatan yang lebih gesit untuk membuat prototipe filter JQ dan mengintegrasikannya dalam skrip PowerShell.
Versi: JQ 1.6 untuk win64, PSVersion 5.1.18362.1171
Jawaban
Powershell mungkin ingin Anda menghindari tanda kutip ganda di dalam '..'
ekspresi. Mencoba
jq --null-input '{ "key": \"val\" }'
atau tepat di bawah karena nama kunci di jq
tidak memerlukan kutipan eksplisit
jq --null-input '{ key: \"val\" }'
Dari jq
manual di bawah - Memanggil jq
Saat menggunakan shell perintah Windows (
cmd.exe
) yang terbaik adalah menggunakan tanda kutip ganda di sekitar program jq Anda ketika diberikan pada baris perintah (bukan-f program-file
opsi), tetapi kemudian tanda kutip ganda dalam program jq membutuhkan pelolosan garis miring terbalik.