我的cURL命令向我返回一些json数据,如下所示:
{
"all":[
{
"id":"1",
"actions":[
"power",
"reboot"
]
},
{
"id":"2",
"actions":[
"shutdown"
]
},
{
"id":"3",
"actions":[
"backup"
]
}
]
}
仅知道id
,如何将actions
的值返回到变量中?我知道如何解析ID,但如何获取actions
?
这是cURL命令:
#!/bin/bash
IDS=$(curl https://DOMAIN/API -H "X-Auth-Token: $TOKEN" | python -c "import sys, json; print [i['id'] for i in json.load(sys.stdin)['all']]")
$IDS
将输出json中的所有IDS。
示例:
如果我搜索id = 1
,我将返回["power", "reboot"]
我还可以使用:
#!/bin/bash
ACTIONS=$(curl -s https://DOMAIN/API -H "X-Auth-Token: TOKEN" | python -c "import sys, json, re; print [ i['allowed_actions'] for i in json.load(sys.stdin)['servers']]")
我想做这样的事情:
#!/bin/bash
ACTIONS=$(curl -s https://DOMAIN/API -H "X-Auth-Token: TOKEN" | python -c "import sys, json, re; print [ if i['id'] == '1': i['allowed_actions'] for i in json.load(sys.stdin)['servers']]")
但是我有语法错误。
如何将该代码转换为单个命令行代码?
for i in json.load(sys.stdin)['all']:
if i['id'] == '1':
print(i['actions'])
答案 0 :(得分:1)
通常情况下,规范是不要在python中使用exec,但是由于您想排成一行,所以您可以选择
cat temp | python -c "exec(\"import sys,json \nfor i in json.load(sys.stdin)['all']:\n if i['id'] == '1':\n print(i['actions'])\")"
在说这句话的同时,我建议您仅创建另一个python文件,然后由该文件完成此工作,希望对您有所帮助:)
答案 1 :(得分:1)
在CLI
中,您可以使用jq
;
curl -s "http://api.icndb.com/jokes/random" | jq '.value.joke'
在您的情况下,可能类似于(未经测试):
ACTIONS=$(curl -s "https://DOMAIN/API" | jq '.all.actions')
jq
的更多信息/示例;
https://medium.com/cameron-nokes/working-with-json-in-bash-using-jq-13d76d307c4