【发布时间】:2020-06-19 10:02:09
【问题描述】:
我想用 jq 做一件非常简单的事情,但我做不到。
对象是:
{
"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} 在我之前写的 jq 命令中。
【问题讨论】:
-
答案解决了你的问题吗?
-
不,我需要完整的命令。您的答案有效,但在我编写的完整 jq 命令中不起作用。
-
什么意思?您发布的示例 JSON 不包含 DomainStatus。包括它,我会更新我的答案
-
完整的命令是 jq '.ElasticsearchClusterConfig |= {InstanceType, InstanceCount}'。这就是整个命令。考虑到您提供的输入 json,您还想要什么?
-
天啊!对不起。我更新了问题并包含了完整的 JSON。