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

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -