J'essaye de créer un fichier JSON en exécutant la commande suivante:

jq --arg greeting world '{"hello":"$greeting"}' > file.json

Cette commande est restée bloquée sans aucune entrée. Tandis que

jq -n --arg greeting world '{"hello":"$greeting"}' > file.json n'analyse pas correctement. Je me demande simplement qu'il est vraiment possible de créer un fichier JSON.

6
Mazzy 2 août 2017 à 22:10

2 réponses

Meilleure réponse

Donc, votre code ne fonctionne pas car inclus la variable entre guillemets doubles qui est traitée comme une chaîne. C'est pourquoi ça ne marche pas

Comme @Jeff Mercado l'a souligné, la solution est

jq -n --arg greeting world '{"hello":$greeting}' > file.json

À propos du - dans un nom. C'est en fait possible. Mais pour l'instant, cela n'est pas disponible dans la version publiée de jq. Si vous compilez la branche master de jq sur votre système. Il existe une nouvelle variable appelée $ARGS.named qui peut être utilisée pour accéder aux informations.

Je viens de compiler et de vérifier la commande ci-dessous et cela fonctionne comme un charme

./jq -n --arg name-is tarun '{"name": $ARGS.named["name-is"]}'
{
  "name": "tarun"
}
10
Tarun Lalwani 2 août 2017 à 20:33

Pour ajouter à ce que Jeff et Tarun l'a déjà dit, vous pourriez vouloir utiliser la syntaxe d'interpolation de chaîne \() dans votre commande. par exemple.

jq -n --arg greeting world '{"hello":"\($greeting)"}'

Pour moi cela produit

{
  "hello": "world"
}

En ce qui concerne votre réponse au commentaire de Jeff, le nom de l'argument que vous choisissez doit être un nom de variable jq valide, donc un argument comme greeting-for-you ne fonctionnera pas mais vous pouvez utiliser des traits de soulignement donc greeting_for_you serait ok. Ou vous pouvez utiliser la version décrite par Tarun.

3
jq170727 2 août 2017 à 21:20