繁体   English   中英

如何使用 jq 打印特定的 object 密钥?

[英]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 
       }
    )
}

选项 1 - jq 播放

或选项 2,如果您不想明确输入名称,请使用占位符,例如

.DomainStatus | .ElasticsearchClusterConfig as $ec | { 
    DomainName, 
    Endpoint, 
    InstanceType:  $ec.InstanceType, 
    InstanceCount: $ec.InstanceCount
}

选项 2 - jq 播放

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM