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

问题描述 投票:0回答:1

我正在编写一个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',则会引发解析数字字母错误。

在第一种情况下我该怎么办。

linux bash shell jq
1个回答
0
投票

您可以使用此:

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字符串用单引号引起来
  • $(...)用于命令替换
  • 使用<<<(此处为字符串)避免创建子shell)>
  • PS:如果您从curl命令获取json文本,并想在shell变量中存储多个字段,请使用:

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

...是您的curl命令。

© www.soinside.com 2019 - 2024. All rights reserved.