我正在尝试抓取并将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
答案 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']")