当我运行命令时,我得到这样的响应
{
"status": "available",
"managed": true,
"name":vdisk7,
"support":{
"status": "supported"
},
"storage_pool": "pfm9253_pfm9254_new",
"id": "ff10abad"-2bf-4ef3-9038-9ae7f18ea77c",
"size":100
},
Run Code Online (Sandbox Code Playgroud)
和数百种这种类型的列表或词典我想要一个做这种事情的命令
if name = "something",
get the id
Run Code Online (Sandbox Code Playgroud)
任何可以帮助我学习这类命令的链接都将受到高度赞赏
我试过了
awk'{if($ 2 =="something")打印$ 0;}'
但我认为响应是在Json中,因此colum明智的awk格式化不起作用.
此外,它只是我需要运行的一个命令,所以我不想使用任何外部库.
Wat*_*ink 14
JSON解析器更适合此任务
awk
并且sed
是解析面向行的文本的实用程序,但不是json.如果你的json格式会改变怎么办?(有些线会在一条线上吗?).
你应该使用任何标准的json解析器.或者使用一些强大的脚本语言,例如PHP,Python,Ruby等.
我可以为您提供有关如何使用python执行此操作的示例.
如果我不能使用强大的脚本语言怎么办?
如果你完全不能使用python,那么就有实用程序jq
:link
如果你有一些最近的发行版,jq
可能已经在存储库中(例如:Ubuntu 13.10在repos中有它).
我可以用python!
我会使用简单的python内联脚本来做到这一点.
例如,我们有一些some_command
返回json的结果.
我们必须得到价值data["name"]
.
开始了:
some_command | python -c "import json, sys; print json.load(sys.stdin)['name']"
Run Code Online (Sandbox Code Playgroud)
它将vdisk7
在您的情况下输出
为此,您需要确定,json完全有效.
如果你有一个json对象列表:
[
{
...
"name": "vdisk17"
...
},
{
...
"name": "vdisk18"
...
},
{
...
"name": "vdisk19"
...
},
...
]
Run Code Online (Sandbox Code Playgroud)
您可以使用一些列表推导:
some_command | python -c "import json, sys; [sys.stdout.write(x['name'] + '\n') for x in json.load(sys.stdin)]"
Run Code Online (Sandbox Code Playgroud)
它将输出:
vdisk17
vdisk18
vdisk19
Run Code Online (Sandbox Code Playgroud)