私の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"
}
}
私の鍵は時々変化し続けます。したがって、たとえば20160522201409-jobsv1-1
明日は別の可能性があります。また、jsonペイロードにそのようなエントリが複数ある場合もあります。
したい echo $KEYS
とjq
を使用してそれを実行しようとしています。
私が試したこと:| jq .KEYS
は、私が頻繁に使用するコマンドです。
Jsonのすべての主キーを表示するjqコマンドはありますか?
私はhostname
フィールドのみを気にします。そして、それを抽出したいと思います。私はgrep
を使用してそれを行う方法を知っていますが、それはクリーンなアプローチではありません。
単に使用できます:keys
:
% jq 'keys' my.json
[
"20160522201409-jobsv1-1"
]
そして、最初のものを得るために:
% jq -r 'keys[0]' my.json
20160522201409-jobsv1-1
-r
は生の出力用です。
--raw-output / -r:
このオプションを使用すると、フィルターの結果が文字列の場合、引用符付きのJSON文字列としてフォーマットされるのではなく、標準出力に直接書き込まれます。これは、jqフィルターを非JSONベースのシステムと通信させる場合に役立ちます。
不明なプロパティの下に既知の値が必要な場合、たとえばxxx.hostName
:
% jq -r '.[].hostName' my.json
20160522201409-jobsv1-1