解析json响应并获取所有特定ID并将它们存储到数组中,然后从shell脚本中删除

时间:2017-03-10 14:44:02

标签: arrays json shell curl

我已经阅读了这个论坛的一些问题和答案,但仍未找到我要找的东西。

这里来自curl cmd的回复: 我想获取所有id并将它们存储到数组中,然后使用curl cmds删除这些ID

 [{
     "_links": {
         "list": {
             "href": "http://10.10.10.185:8080/vndfs/lcd/v3/vdfs"
         },
         "modifyInfo": {
             "href": "http://10.10.10.185:8080/vdfs/lcd/v3/vdfs/TEST1-5cda5079a2cb47c28466bc1983f8b2e6"
         }
     },
     "description": "Purple is my color",
     "id": "TEST1-5cda5079a2cb47c28466bc1983f8b2e6"
 }, {
     "_links": {
         "list": {
             "href": "http://10.10.10.185:8080/vndfs/lcd/v3/vdfs"
         },
         "modifyInfo": {
             "href": "http://10.10.10.185:8080/vdfs/lcd/v3/vdfs/TEST2-5cda5079a2cb47c28466bc1983f8b2e6"
         }
     },
     "description": "Blue is my color",
     "id": "TEST2-5cda5079a2cb47c28466bc1983f8b2e6"
 }]

getid.sh:

#!/bin/bash
VDF=`curl -s GET http://10.10.10.185:8080/vdfs/lcd/v3/vdfs
VDFSID=`echo $VNF | python -c 'import json,sys; response=json.loads(sys.stdin.read()); print response[0]["id"]'`
echo $VDFSID

来自echo的输出:

TEST1-5cda5079a2cb47c28466bc1983f8b2e6

但我希望获取所有ID并将其存储到数组中,然后我可以删除每个TEST1-XXTEST2-XXX id

for i in response['id']:
     curl -XDELETE http://10.10.10.185:8080/vdfs/lcd/v3/vdfs/$i 

对此有何建议?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将jq JSON解析器与xarg一起使用,将结果注入curl

curl -s -X GET http://10.10.10.185:8080/vdfs/lcd/v3/vdfs | \
    jq -r ' .[] | .id ' | \
    xargs -I {} curl -X DELETE http://10.10.10.185:8080/vdfs/lcd/v3/vdfs/{} 

这会从您的JSON数组中提取id并使用网址http://10.10.10.185:8080/vdfs/lcd/v3/vdfs/<ID>

连续调用每个ID的curl

您还可以使用jsontool解析JSON(使用npm安装):

curl -s -X GET http://10.10.10.185:8080/vdfs/lcd/v3/vdfs | \
    json -a id | \
    xargs -I {} curl -X DELETE http://10.10.10.185:8080/vdfs/lcd/v3/vdfs/{}