Linux 如何在bash中使用jq从变量中包含的json中提取值
我正在编写一个bash脚本,其中一个json值存储在一个变量中,现在我想使用Jq提取该json中的值。使用的代码是Linux 如何在bash中使用jq从变量中包含的json中提取值,linux,bash,shell,jq,Linux,Bash,Shell,Jq,我正在编写一个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'
这会抛出一个错误,即没有这样的文件或目录
如果我把这个改成
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”:“lyz1to6ztwclhdhsiaexyxg”,“重定向到”: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"
注意以下变化:
- 将完整的json字符串用单引号括起来
- 使用
替换命令$(…)
- 使用
如果尝试手动执行此操作,
它抛出解析数字字母错误 似乎您没有转义echo{“code”:“lyz1to6ztwclhdhsiaexyxg”,“重定向到”:http://example.com/client-redirect-uri?code=lyz1To6ZTWClDHSiaeXyxg“}jq'.code'
命令的字符串。在您的例子中,使用单引号(撇号echo
)进行转义将起作用-与使用'
json路径参数(jq
时相同)'.code'
在本文中,您将json响应放在了“”(单引号)中,从而将其更改为文本字符串。我不能这样做,因为在我运行前一行中的curl命令并将响应保存在该变量中之后,我将json_val作为curl响应。或者请建议一种方法,将变量中的数据转换为字符串,然后传递给jq。是的,但是有多个字段需要从同一个curl响应中提取并保存在两个不同的变量中。您能否建议一种从curlJSON响应中提取两个值并保存在两个diff变量中的方法。这就可以完成我的工作了。它确实可以工作,但也会抛出echoset未定义的错误read-r code_val redirect_to<在shell上使用我建议的ka命令运行curl,看看运行是否正常lyz1To6ZTWClDHSiaeXyxg
read -r code_val redirect_to < <(curl ... | jq -r '.code + "\t" + .redirect_to')
$ echo '{"code":"lyz1To6ZTWClDHSiaeXyxg","redirect_to":"http://example.com/client-redirect-uri?code=lyz1To6ZTWClDHSiaeXyxg"}' | jq '.code' "lyz1To6ZTWClDHSiaeXyxg"