J'ai besoin de mettre en variable true/false et l'envoyer en json avec la commande curl
:
name=$1
sx=$2
`curl -d '{"name":"'"$name"'", "sex":true}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc`
La variable sx
accepte la valeur male
ou female
comment définir la valeur booléenne appropriée dans sex
variable?
L'utilisation d'une variable pour l'ensemble de la chaîne JSON et sa construction pièce par pièce peuvent rendre la citation moins lourde et rendre la ligne de commande curl
plus lisible et plus facile à gérer, même si le code global est beaucoup plus détaillé.
La construction de la chaîne est effectuée ici à l'aide de l'opérateur de concaténation automatique de chaîne +=
. Notez que dans json_string+=$name
, par exemple, aucune citation n'est nécessaire car aucune division de mot n'est effectuée et aucun caractère spécial n'est présent sur le côté droit.
Vous pouvez utiliser un tableau associatif pour rechercher la valeur souhaitée en fonction de la clé fournie. Ici, j'assigne les paires individuellement. Ci-dessous, je montrerai comment les exécuter en une seule tâche.
name=$1
sx=$2
declare -A sexes
sexes[male]=false
sexes[female]=true
json_string='{"name":"'
json_string+=$name
json_string+='", "sex":'
json_string+=${sexes[$sx]}
json_string+='}'
curl -d "$json_string" " -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
Vous pouvez diviser encore plus le JSON pour lui donner un aspect un peu plus structuré dans le code (le contenu de la chaîne obtenue sera toujours une chaîne à une seule ligne). Idéalement, si vous utilisez un code JSON plus complexe que celui-ci, utilisez un outil JSON spécialement conçu pour créer la structure.
Voici comment vous pouvez effectuer la déclaration et l'affectation d'un tableau associatif en une seule fois. Le premier exemple est sur une ligne et le second sur plusieurs lignes - encore une fois pour améliorer la lisibilité et la facilité de maintenance.
declare -A sexes='([female]="true" [male]="false")'
declare -A sexes='(
[female]="true"
[male]="false"
)'
Le moyen le plus simple de mapper la chaîne male
sur true
ou false
(selon vos besoins) et sur female
avec une autre valeur est une simple clause if…then…else
. Le truc est la citation, mais vous l’avez déjà obtenue avec la variable $name
. Alors:
if [ "$sx" = "male" ]; then
sex="true"; # or whatever you consider male sex to be
else
sex="false"; # just the opposite, see above
fi
curl -d '{"name":"'"$name"'", "sex":'$sex'}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc
Dans votre cas, vous utilisez JSON et pouvez utiliser le texte "true" et le texte "false".
Vous devez ajouter à la logique de script bash:
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
puis exécutez la commande curl avec ... {"name":"'"$name"'", "sex":\"$sex\"} ...
ou juste ... {"name":"'"$name"'", "sex":$sex} ...
Script de test:
#!/bin/bash
sx="male"
sex="false"
if [ "$sx" = "male" ]; then
sex="true"
fi
echo \"$sex\"