json - How to extract keys from multiple, nested arrays using jq -
setup
i'm trying figure out how jq filters work , having trouble figuring out nested arrays. using data below cannot make flat 5 key output. can 1 key , 4 nulls or 4 keys , 1 null, not 5 keys.
1 key, 4 nulls:
.reservations[] | {ownerid, instanceid, imageid, privateipaddress, platform}
returns:
{ "ownerid": "000000000000", "instanceid": null, "imageid": null, "privateipaddress": null, "platform": null }
4 keys, 1 null:
.reservations[].instances[] | {ownerid, instanceid, imageid, privateipaddress, platform} { "ownerid": null, "instanceid": "i-v33333333", "imageid": "ami-44444444", "privateipaddress": "10.0.0.0", "platform": "windows" }
for various reasons cannot use "--query" option in aws cli return format i'm looking for:
aws ec2 describe-instances --region us-east-1 --profile temp --query 'reservations[*].{instanceid:instances[0].instanceid,ip:instances[0].privateipaddress,platform:instances[0].platform,ownerid:ownerid}'
output:
[ { "instanceid": "i-11111111", "ip": "10.9.9.3", "ownerid": "111111111111", "platform": windows }, { "instanceid": "i-22222222", "ip": "10.0.0.0", "ownerid": "111111111111", "platform": windows } ]
here json input:
{ "reservations": [ { "ownerid": "000000000000", "reservationid": "r-22222222", "groups": [], "requesterid": "111111111111", "instances": [ { "monitoring": { "state": "enabled" }, "publicdnsname": null, "state": { "code": 16, "name": "running" }, "ebsoptimized": false, "launchtime": "2015-04-10t00:02:02.000z", "platform": "windows", "privateipaddress": "10.0.0.0", "productcodes": [ { "productcodeid": "0000000000000000000000000", "productcodetype": "marketplace" } ], "vpcid": "vpc-2222222", "statetransitionreason": null, "instanceid": "i-v33333333", "imageid": "ami-44444444", "privatednsname": "ip-10-0-0-0.aws.foobarcloud.com", "keyname": "bar-servicemesh", "securitygroups": [ { "groupname": "bar-wildcard-dns-intranet-instancesecuritygroup-vn0dfq13qcdy", "groupid": "sg-55555555" } ], "clienttoken": "11111111-2222-3333-4444-555555555555_subnet-66666666_1", "subnetid": "subnet-66666666", "instancetype": "t2.medium", "networkinterfaces": [ { "status": "in-use", "macaddress": "00:00:00:00:00:77", "sourcedestcheck": true, "vpcid": "vpc-66666666", "description": null, "networkinterfaceid": "eni-11111111" } ] } ] } ] }
question using json input above, how use jq produce following output?:
{ "ownerid": "000000000000", "instanceid": "i-v33333333", "imageid": "ami-44444444", "privateipaddress": "10.0.0.0", "platform": "windows" }
you can use variable store ownerid
in:
.reservations[] | .ownerid $ownerid | ( .instances[] | { "ownerid": $ownerid, instanceid, imageid, privateipaddress, platform} )
Comments
Post a Comment