私はjqに最初に触れ、jsonファイルから一致する値の上位(特定のレベル)を取得する必要があるシナリオがあります。以下はサンプルデータです。
{
"DevOps": {
"us-east-1": {
"i-049aa9a3bddb4****": {
"AmiLaunchIndex": 0,
"ImageId": "ami-00068cd7555f543d5",
"InstanceId": "i-049aa9a3bddb4*****",
"InstanceType": "t2.nano",
"LaunchTime": "2019-11-24 18:39:25+00:00",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "us-east-1a",
"GroupName": "",
"Tenancy": "default"
},
"PrivateDnsName": "ip-10-250-128-77.ec2.internal",
"PrivateIpAddress": "10.250.128.77",
"ProductCodes": [],
"PublicDnsName": "",
"Tags": [
{
"Key": "Name",
"Value": "Network-Test-Host"
}
],
},
"i-0368117434*****": {
"AmiLaunchIndex": 0,
"ImageId": "ami-078137ecf12552edf",
"InstanceId": "i-0368117434******",
"InstanceType": "c5.2xlarge",
"KeyName": "infra-systems-prod-key",
"LaunchTime": "2020-02-13 15:51:15+00:00",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "us-east-1a",
"GroupName": "",
"Tenancy": "default"
},
"PrivateDnsName": "ip-10-250-138-161.ec2.internal",
"PrivateIpAddress": "10.250.138.161",
"ProductCodes": [],
"PublicDnsName": "",
"Tags": [
{
"Key": "Name",
"Value": "Network-Test-Host"
}
],
},
}
}
}
たとえば、検索値が「10.250.128.77」の場合は、「i-049aa9a3bddb4****」という親エントリを取得する必要があります。値が「Network-Test-Host」の場合、2つのインスタンスID(i-049aa9a3bddb4****、i-0368117434*****)のリストが提供されます。その後、この時点からすべてのキーを繰り返して、ホスト名、ImageId、インスタンスタイプなどの対応する値を取得できます。
これにご協力いただきありがとうございます。
答え1
特定のプライベートIPアドレスを使用したクエリ:
jq '.DevOps."us-east-1" | map_values(select( .PrivateIpAddress == "10.250.128.77" ))' file
コマンドラインパラメータからクエリIPアドレスを取得するためのパラメータ化:
jq --arg addr 10.250.128.77 \
'.DevOps."us-east-1" | map_values(select( .PrivateIpAddress == $addr ))' file
Key
特定のタグを使用したクエリValue
:
jq '.DevOps."us-east-1" | map_values(select( IN(.Tags[]; {Key: "Name", Value: "Network-Test-Host"}) ))' file
コマンドライン引数から合計を取得するには、パラメータ化してくださいKey
。Value
jq --arg Key Name --arg Value Network-Test-Host \
'.DevOps."us-east-1" | map_values(select( IN(.Tags[]; $ARGS.named) ))' file
.DevOps."us-east-1"
このコマンドは、クエリに一致する入力文書部分のキーと値を含む単一のオブジェクトを含むJSON文書を生成します。
各コマンドの共通点は、select()
セクションの値にステートメントを適用することです.DevOps."us-east-1"
。ブール式は、クエリでテストするセクションによって異なります。ブール式で評価される部分本物他のすべてのビットは消去中に保持されます。