Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash中使用jq从变量中包含的json中提取值_Linux_Bash_Shell_Jq - Fatal编程技术网

Linux 如何在bash中使用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' 这会抛出一个错误,即没有这样的文件或目录 如果我

我正在编写一个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”:“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
    命令的字符串。在您的例子中,使用单引号(撇号
    '
    )进行转义将起作用-与使用
    jq
    json路径参数(
    '.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"