从curl POST解析HTTP响应

时间:2017-01-24 15:58:02

标签: json bash curl

我正在尝试抓取并将N_596164000673190002分配给curl命令中的变量。

这是命令:

curl -L -H 'X-Cisco-Meraki-API-Key: mykeygoeshere' -X POST -H'Content-Type: application/json' --data-binary '{"name":"'"$NETWORK_NAME"'", "type":"appliance", "timeZone":"'"$TIME_ZONE"'"}' 'https://dashboard.meraki.com/api/v0/organizations/foobar/networks'

这是回复:

{"id":"N_596164000673190002","organizationId":"foo","type":"appliance","name":"bar","timeZone":"America/Chicago","tags":""}

如何在id(没有双引号)之后成功读取和获取变量,同时同时将其分配给变量$NETWORK_ID?我想这一切都可以在一行中完成。

如果成功,echo $NETWORK_ID应返回N_596164000673190002

2 个答案:

答案 0 :(得分:3)

要在bash中解析json,人们通常会使用jq,因为它默认安装在大多数Unix发行版上。

尝试以下方法:

NETWORK_ID=$(my_curl_command | jq -r '.id')

此处,'.id'是一个过滤器,表示我们要检索键id的值,而-r标志用于从输出中删除双引号。

答案 1 :(得分:1)

将JSON输出传递给python json以获取所需的id值,并使用bash command substitution将结果分配给NETWORK_ID环境变量。

NETWORK_ID=$(curl -L -H 'X-Cisco-Meraki-API-Key: mykeygoeshere' -X POST \
  -H'Content-Type: application/json' \
  --data-binary '{"name":"'"$NETWORK_NAME"'", "type":"appliance", \
  "timeZone":"'"$TIME_ZONE"'"}' \
  'https://dashboard.meraki.com/api/v0/organizations/foobar/networks' \
 | python -c "import sys, json; print json.load(sys.stdin)['id']")