如何在bash中使用jq从变量中包含的json中提取值

2024-05-17

我正在编写一个 bash 脚本,其中存储了一个 json 值,现在我想使用 Jq 提取该 json 中的值。使用的代码是。

json_val={"code":"lyz1To6ZTWClDHSiaeXyxg","redirect_to":"http://example.com/client-redirect-uri?code=lyz1To6ZTWClDHSiaeXyxg"}
  code_val= echo"$json_val" | jq '.code'

这会引发没有此类文件或目录的错误。

如果我将其更改为

json_val={"code":"lyz1To6ZTWClDHSiaeXyxg","redirect_to":"http://example.com/client-redirect-uri?code=lyz1To6ZTWClDHSiaeXyxg"}
  code_val=echo" $json_val " | jq '.code'

这不会引发任何错误,但 code_val 中的值为 null。

如果尝试手动执行echo {"code":"lyz1To6ZTWClDHSiaeXyxg","redirect_to":"http://example.com/client-redirect-uri?code=lyz1To6ZTWClDHSiaeXyxg"} | jq '.code'它会抛出解析数字字母错误。

第一种情况我该怎么做。


你可以使用这个:

json_val='{"code":"lyz1To6ZTWClDHSiaeXyxg","redirect_to":"http://example.com/client-redirect-uri?code=lyz1To6ZTWClDHSiaeXyxg"}'
code_val=$(jq -r '.code' <<< "$json_val")
echo "$code_val"
lyz1To6ZTWClDHSiaeXyxg

请注意以下更改:

  • 将完整的 json 字符串用单引号括起来
  • use of $(...)用于命令替换
  • Use of <<<(此处为字符串)以避免创建子 shell

PS:如果你得到json来自curl命令的文本并且想要在shell变量中存储多个字段,然后使用:

read -r code_val redirect_to < <(curl ... | jq -r '.code + "\t" + .redirect_to')

Where ...是你的curl命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在bash中使用jq从变量中包含的json中提取值 的相关文章

随机推荐