[英]How to print specific object keys using jq?
我想用jq做一件非常简单的事情,但我做不到。
object 是:
{
"DomainStatus": {
"DomainId": "12345",
"DomainName": "test",
"ARN": "arn:aws:es:eu-west-1:12345:domain/test",
"Created": true,
"Deleted": false,
"Endpoint": "test.com",
"Processing": false,
"UpgradeProcessing": false,
"ElasticsearchVersion": "5.3",
"ElasticsearchClusterConfig": {
"InstanceType": "t2.medium.elasticsearch",
"InstanceCount": 2,
"DedicatedMasterEnabled": false,
"ZoneAwarenessEnabled": true,
"ZoneAwarenessConfig": {
"AvailabilityZoneCount": 2
}
},
"EBSOptions": {
"EBSEnabled": true,
"VolumeType": "gp2",
"VolumeSize": 30
},
... more fields ...
}
}
我想要这些选项中的任何一个:
选项1:
{
"DomainName": "test",
"Endpoint": "test.com",
"ElasticsearchClusterConfig": {
"InstanceType": "t2.medium.elasticsearch",
"InstanceCount": 2,
}
}
或者
选项 2:
{
"DomainName": "test",
"Endpoint": "test.com",
"InstanceType": "t2.medium.elasticsearch",
"InstanceCount": 2,
}
我使用以下方法实现了选项 2:
jq '.DomainStatus | {DomainName, Endpoint, InstanceType: .ElasticsearchClusterConfig.InstanceType, InstanceCount: .ElasticsearchClusterConfig.InstanceCount}'
但问题是我不想编写冗余代码。
我不想要这一行: InstanceType: .ElasticsearchClusterConfig.InstanceType
它想要这样的东西: .ElasticsearchClusterConfig | {InstanceType, InstanceCount}
.ElasticsearchClusterConfig | {InstanceType, InstanceCount}
我之前写的jq命令里面。
您不必重复任何代码。 您可以指示jq
只保留您想要的字段。 |=
,赋值更新运算符通过在其右侧使用字段重新创建 object 来修改其左侧。 在我们的例子中,只更新你需要的。
.DomainStatus | {
DomainName,
Endpoint,
ElasticsearchClusterConfig: (
.ElasticsearchClusterConfig | {
InstanceType,
InstanceCount
}
)
}
或选项 2,如果您不想明确输入名称,请使用占位符,例如
.DomainStatus | .ElasticsearchClusterConfig as $ec | {
DomainName,
Endpoint,
InstanceType: $ec.InstanceType,
InstanceCount: $ec.InstanceCount
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.