Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
Shell脚本将JSON值卷曲为变量_Json_Macos_Shell_Curl - Fatal编程技术网

Shell脚本将JSON值卷曲为变量

Shell脚本将JSON值卷曲为变量,json,macos,shell,curl,Json,Macos,Shell,Curl,我想知道如何将服务器的curljson输出解析为变量 目前,我有- curl -X POST -H "Content: agent-type: application/x-www-form-urlencoded" https://www.toontownrewritten.com/api/login?format=json -d username="$USERNAME" -d password="$PASSWORD" | python -m json.tool 但它只从服务器输出JSON,然后

我想知道如何将服务器的curljson输出解析为变量

目前,我有-

curl -X POST -H "Content: agent-type: application/x-www-form-urlencoded" https://www.toontownrewritten.com/api/login?format=json -d username="$USERNAME" -d password="$PASSWORD" | python -m json.tool
但它只从服务器输出JSON,然后对其进行解析,如下所示:

{
    "eta": "0",
    "position": "0",
    "queueToken": "6bee9e85-343f-41c7-a4d3-156f901da615",
    "success": "delayed"
}
但是,我如何将上面从服务器返回的成功值放入变量$success中,并将该值作为延迟值&将queueToken作为变量$queueToken,将6bee9e85-343f-41c7-a4d3-156f901da615作为值



那么当我使用-

echo "$SUCCESS"
它将此显示为输出-

delayed


当我使用

echo "$queueToken"
输出为

6bee9e85-343f-41c7-a4d3-156f901da615
谢谢

下面是一个

#/bin/bash
函数jsonval{

temp=`echo$json | sed's/\\/\//g''sed's/[{}]//g''awk-v k=“text”{n=split($0,a,”);for(i=1;i查找并安装
jq
)。
jq
是一个json解析器。像
sed
这样的面向行的工具无法可靠地解析json,因为json与XML一样,不是面向行的数据格式

关于你的问题:

source <(
    curl -X POST -H "$content_type" "$url" -d username="$USERNAME" -d password="$PASSWORD" | 
    jq -r '. as $h | keys | map(. + "=\"" + $h[.] + "\"") | .[]'
)

source您可以在命令行上使用perl模块:

首先,确保它们已安装,在基于debian的环境下,您可以

sudo apt-get install libjson-xs-perl
但对于其他操作系统,您可以通过以下方式安装perl模块:

注意:您可能必须以超级用户权限运行此操作

然后:


你已经尝试过了吗?请分享你的尝试!我没有真正尝试过任何东西,现在,我只是手动让echo向用户询问JSON的输出是什么,让用户手动输入JSON并将其存储在变量中,并显示“读取成功”我不知道如何在我的脚本中使用它,介意演示一下它是如何工作的以及我是如何使用它的吗?谢谢!试过了,但是我该如何调用变量?比如,
echo“$queueToken”
?我尝试了
source您需要删除到第二个
jq
命令的管道:它正在吃掉第一个
jq
的输出,因此
源代码没有任何效果。
$queueToken
在该jq命令中是一个jq变量,而不是shell变量。请
设置-x
,然后运行我显示的命令。如何操作我用管道将jq变量传输到shell?你没有。
这并不像我希望的那样工作……当我使用代码时,我似乎不能使用
echo${Json[queueToken]}
。@JeremyZh回答编辑:添加了一些双引号,并用真实的url进行了测试(我的第一次测试使用了我的一些Json)…但由于我没有帐户,我只能:
echo${!Json[@]}
give:
banner success
echo${Json[success]}
print
false
我在一个使用shell脚本的mac intel环境中。所以我不知道在哪里可以安装Json::XS perl libs…在使用了
echo${Json[queueToken]}代码之后也是如此
,它不输出任何内容,我想我需要安装一些依赖项才能正常工作。在哪里/如何安装JSON::XS perl libs?
sudo apt get install libjson XS perl
在mac上不起作用。您可以随时在中创建一次性帐户。您可以从中安装perl模块。
sudo apt-get install libjson-xs-perl
cpan App::cpanminus
cpan JSON::XS
curlopts=(-X POST -H
    "Content: apent-type: application/x-www-form-urlencoded"
    -d username="$USERNAME" -d password="$PASSWORD")
curlurl=https://www.toontownrewritten.com/api/login?format=json

. <(
    perl -MJSON::XS -e '
        $/=undef;my $a=JSON::XS::decode_json <> ;
        printf "declare -A Json=\047(%s)\047\n", join " ",map {
            "[".$_."]=\"".$a->{$_}."\""
        } qw|queueToken success eta position|;
    ' < <(
        curl "${curlopts[@]}" $curlurl
    )
)
echo ${Json[queueToken]}
6bee9e85-343f-41c7-a4d3-156f901da615

echo ${Json[eta]}
0