如何从linux shell脚本中的json键值对获取值

时间:2017-09-28 06:51:56

标签: json linux bash shell sh

嗨,我正在写一个小的shell脚本。在那里我使用curl命令来调用api。返回的是扫描状态。

{"status":"14"}

我想获得此状态并检查它是否小于100;这就是我到目前为止所做的事情

    a=0

    while [ $a -lt 100 ]
    do

        curlout=$(curl "http://localhost:9090/JSON/spider/view/status/?zapapiformat=JSON&scanId=0");
        echo "$curlout";
       a=`expr $a + 1`
    done

我想要做的是将该状态分配给$ a;如何读取这个json以获取shell脚本中的值

2 个答案:

答案 0 :(得分:3)

如果您需要使用JSON,则应获取jq

$ echo '{"status": "14"}' | jq '.status|tonumber'
14

或者,不那么严格:

$ echo '{"status": "14"}' | jq -r '.status'
14

答案 1 :(得分:0)

如果您确定卷曲输出的格式,那么它非常简单。

echo "$curlout" | tr -cd '[:digit:]'

来自tr的{​​{3}},

   -c, -C, --complement
          use the complement of SET1

   -d, --delete
          delete characters in SET1, do not translate

   [:digit:]
          all digits

因此该命令会删除除数字以外的所有字符。