Littéraux de chaîne dans JQ à l'aide de PowerShell [duplicate]
Je ne peux pas faire fonctionner les littéraux de chaîne JQ à partir de Powershell. Par exemple, cela génère un joli objet JSON dans Bash, mais échoue dans 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
Au début, je soupçonnais des citations incorrectes, mais des Write-Output '{"key":"val"}'
résultats {"key":"val"}
comme je m'y attendais.
Je peux contourner ce problème en écrivant mon filtre JQ dans un fichier. L'utilisation de .NET WriteAllText
garantit que le fichier est encodé au format UTF-8 sans nomenclature.
PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
"key": "val"
}
Je recherche une approche plus agile pour le prototypage des filtres JQ et leur intégration dans les scripts PowerShell.
Versions: JQ 1.6 pour win64, PSVersion 5.1.18362.1171
Réponses
Powershell peut souhaiter que vous échappiez les guillemets doubles à l'intérieur de l' '..'
expression. Essayer
jq --null-input '{ "key": \"val\" }'
ou juste en dessous car les noms de clé dans jq
n'ont pas besoin d'un devis explicite
jq --null-input '{ key: \"val\" }'
Depuis le jq
manuel sous - Invoquer jq
Lorsque vous utilisez le shell de commande Windows (
cmd.exe
), il est préférable d'utiliser des guillemets doubles autour de votre programme jq lorsqu'ils sont donnés sur la ligne de commande (au lieu de l'-f program-file
option), mais les doubles guillemets dans le programme jq doivent être échappés par une barre oblique inverse.