无法将文件中的多个值分配给 json 请求
Posted
技术标签:
【中文标题】无法将文件中的多个值分配给 json 请求【英文标题】:Unable to assign multiple values from a file to a json request 【发布时间】:2022-01-19 17:02:31 【问题描述】:我有一个带有这条测试线的简单文件:
mmm@gmail.com 31460 147557432
我的目标是作为 json 数据发送。
在我的 while 循环中,我可以在代码示例的第二行中回显变量。
但是,当我尝试将它们分配给 jsonstring 和 echo 时,不会填充这些值。
我需要做什么才能将这些值传递给我的 json 字符串?
while read emailvar idvar expirevar; do
echo "$emailvar:$expirevar:$idvar"
jsonstring=$idvar $emailvar $expirevar
echo "$jsonstring"
#jsonstring='"user_id":"$idvar","email":"$emailvar","custom_attributes":"Program_Expires_at":"$expirevar"'
done < "tempdata.txt"
【问题讨论】:
【参考方案1】:#!/bin/bash
while read line;
do
line_array=($line)
emailvar=$line_array[0]
expirevar=$line_array[1]
idvar=$line_array[2]
jsonstring='"user_id": "'$idvar'", "email": "'$emailvar'", "custom_attributes":"Program_Expires_at": "'$expirevar'"'
echo $jsonstring
done < 'tempdata.txt'
输出:
【讨论】:
【参考方案2】:您必须对空格进行转义以使其成为字符串的一部分,而不是创建一个带有一些命令前分配的简单命令。
jsonstring=$idvar\ $emailvar\ $expirevar
通常写成
jsonstring="$idvar $emailvar $expirevar"
在您的注释分配中,您使用了 单 引号,这可以防止参数扩展。您需要使用双引号,这需要手动转义内部双引号。不过,更强大的是使用像 jq
这样的工具为您生成 JSON:它会负责转义变量中的任何字符以生成有效的 JSON。
jsonstring=$(jq -n \
--arg id "$idvar" \
--arg email "$emailvar" \
--arg expire "$expirevar" \
'user_id: $id,
email: $email,
custom_attributes: Program_Expires_at: $expire'
)
【讨论】:
【参考方案3】:这似乎本质上是 bash 如何处理变量和参数扩展的问题。我相信这里的解决方案基本上是添加一堆双引号。
双引号可用于启用多个变量的参数扩展。对于此 bash 脚本中的 JSON 输出,我们需要使用嵌套的双引号。
要解决这个问题,我们可以:
在jsonstring
的值周围加上双引号 ("
)
在jsonstring
和\
的值中使用的字符串周围的双引号转义
如果您希望将 $idvar
和 $expirevar
解释为数字而不是字符串,则不需要在这些值周围使用转义的双引号。
例如:
#!/bin/bash
while read emailvar idvar expirevar; do
jsonstring="\"user_id\":$idvar,\"email\":\"$emailvar\",\"custom_attributes\":\"Program_Expires_at\":$expirevar"
echo "$jsonstring"
done < "tempdata.txt"
示例输出:
user@pc: bash ./script.sh
"user_id":31460,"email":"mmm@gmail.com","custom_attributes":"Program_Expires_at":147557432
user@pc: bash ./script.sh | jq .
"user_id": 31460,
"email": "mmm@gmail.com",
"custom_attributes":
"Program_Expires_at": 147557432
【讨论】:
以上是关于无法将文件中的多个值分配给 json 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何等待module.export函数完成请求,然后再将其返回值分配给不同JS文件中的变量[重复]