我正在编写一个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
注意以下更改:
$(...)
用于命令替换<<<
(此处为字符串)避免创建子shell)>PS:如果您从curl命令获取json
文本,并想在shell变量中存储多个字段,请使用:
read -r code_val redirect_to < <(curl ... | jq -r '.code + "\t" + .redirect_to')
...
是您的curl命令。