我有一个返回一些 json 结果的 curl 命令。
{
"all":[
{
"id":"1",
"actions":[
"power",
"reboot"
]
},
{
"id":"2",
"actions":[
"shutdown"
]
},
{
"id":"3",
"actions":[
"backup"
]
}
]
}
我使用此命令检索数据操作:
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']]"
但我想在 python 命令行中使用这段代码:
for i in json.load(sys.stdin)['all']:
if i['id'] == '1':
print(i['actions'])
我试过这个:
curl -s https://DOMAIN/API -H "X-Auth-Token: TOKEN" | python -c "import sys, json, re; print [ if i['id'] == '1': i['actions'] for i in json.load(sys.stdin)['servers']]"
但是返回语法错误
File "<string>", line 1
import sys, json, re; for i in json.load(sys.stdin)['all']:\nif i['id'] == '1':\nprint(i['actions'])
^
SyntaxError: invalid syntax
最佳答案
你想打印这个表达式:
[i['actions'] for i in json.load(sys.stdin)['all'] if i['id'] == '1']
这会过滤 id == 1
的子字典,并使用 actions
数据构建一个列表。
如此适应于 curl 命令行:
curl -s https://DOMAIN/API -H "X-Auth-Token: TOKEN" | python -c "import sys, json, re; print([i['actions'] for i in json.load(sys.stdin)['all'] if i['id'] == '1'])"
输入一个简单的 python 命令行是可行的:
[['power', 'reboot']]
id 似乎是唯一的,所以最好避免返回 1 元素列表:
next((i['actions'] for i in json.load(sys.stdin)['all'] if i['id'] == '1'),None)
使用该表达式它会产生 ['power', 'reboot']
或 None
如果没有找到
关于python - 如何将此代码写入单行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54556871/