如何使用 Bash 脚本在 curl 命令中设置布尔值

如何使用 Bash 脚本在 curl 命令中设置布尔值

我需要设置变量的真/假值并使用curl命令将其发送到 json:

name=$1
sx=$2

`curl -d '{"name":"'"$name"'", "sex":true}' -H "Content-Type: application/json" -X POST http://localhost:8080/setacc`

变量sx接受值male或者female如何将适当的布尔值设置到sex变量中?

答案1

将字符串映射male到或truefalse取决于您的需要)以及female其他值的最简单方法是使用简单if…then…else子句。诀窍在于引用,但您已经通过变量实现了这一点$name。因此:

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

答案2

在您的情况下,您使用 json 并且可以使用文本“true”和文本“false”。

您需要添加 bash 脚本逻辑:

sex="false"
if [ "$sx" = "male" ]; then
  sex="true"
fi

... {"name":"'"$name"'", "sex":\"$sex\"} ...然后使用或仅运行 curl 命令... {"name":"'"$name"'", "sex":$sex} ...

测试脚本:

#!/bin/bash

sx="male"

sex="false"
if [ "$sx" = "male" ]; then
  sex="true"
fi

echo \"$sex\"

答案3

使用一个变量来表示整个 JSON 字符串并分段构建它可以使引用不那么繁琐,并使命令curl行更具可读性和更易于维护,尽管整体代码更加冗长。

这里使用字符串自连接运算符 来构建字符串+=。请注意json_string+=$name,例如,在 中,不需要引用,因为没有执行单词拆分,并且右侧没有特殊字符。

您可以使用关联数组根据提供的键查找所需的值。这里我单独分配这些对。下面我将展示如何在一个分配中完成它们。

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

您可以进一步分解 JSON,使其在代码中看起来更加结构化(生成的字符串内容仍将是单行字符串)。理想情况下,如果您使用的 JSON 比这更复杂,则应使用专门构建的 JSON 工具来构建结构。

以下是如何一次性进行关联数组声明和赋值。第一个例子在一行中,第二个例子在多行中 - 同样是为了提高可读性和可维护性。

declare -A sexes='([female]="true" [male]="false")'

declare -A sexes='(
    [female]="true"
    [male]="false"
)'

相关内容