sud*_*hkr 16 bash shell parsing json jq
我的json看起来像这样:
{
"20160522201409-jobsv1-1": {
"vmStateDisplayName": "Ready",
"servers": {
"20160522201409 jobs_v1 1": {
"serverStateDisplayName": "Ready",
"creationDate": "2016-05-22T20:14:22.000+0000",
"state": "READY",
"provisionStatus": "PENDING",
"serverRole": "ROLE",
"serverType": "SERVER",
"serverName": "20160522201409 jobs_v1 1",
"serverId": 2902
}
},
"isAdminNode": true,
"creationDate": "2016-05-22T20:14:23.000+0000",
"totalStorage": 15360,
"shapeId": "ot1",
"state": "READY",
"vmId": 4353,
"hostName": "20160522201409-jobsv1-1",
"label": "20160522201409 jobs_v1 ADMIN_SERVER 1",
"ipAddress": "10.252.159.39",
"publicIpAddress": "10.252.159.39",
"usageType": "ADMIN_SERVER",
"role": "ADMIN_SERVER",
"componentType": "jobs_v1"
}
}
Run Code Online (Sandbox Code Playgroud)
我的钥匙不时变化.所以例如20160522201409-jobsv1-1明天可能是别的东西.此外,我可能在json有效负载中不止一个这样的条目.
我想echo $KEYS,我想尝试使用它jq.
我尝试的事情| jq .KEYS是:
我经常使用的命令.
是否有jq命令显示json中的所有主键?
我只关心这个hostname领域.我想提取出来.我知道如何使用它,grep但它不是一个干净的方法.
and*_*lrc 21
你可以简单地使用keys::
% jq 'keys' my.json
[
"20160522201409-jobsv1-1"
]
Run Code Online (Sandbox Code Playgroud)
并获得第一个:
% jq -r 'keys[0]' my.json
20160522201409-jobsv1-1
Run Code Online (Sandbox Code Playgroud)
-r 用于原始输出:
--raw-output / -r:使用此选项,如果过滤器的结果是字符串,则它将直接写入标准输出,而不是格式化为带引号的JSON字符串.这对于使jq过滤器与非基于JSON的系统进行通信非常有用.
如果您想要一个未知属性以下的已知值,例如xxx.hostName:
% jq -r '.[].hostName' my.json
20160522201409-jobsv1-1
Run Code Online (Sandbox Code Playgroud)