# Parsing List results

**URL:** <https://www.ruby-forum.com/t/parsing-list-results/196883>\
**Category:** Ruby\
**Created:** [January 19, 2009, 6:01pm UTC](https://www.ruby-forum.com/t/parsing-list-results/196883 "2009-01-19T18:01:28Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![oferar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/67e7ee/32.png) [@oferar](https://www.ruby-forum.com/u/oferar)\
**Post date:** [January 19, 2009, 6:01pm UTC](https://www.ruby-forum.com/t/parsing-list-results/196883/1 "2009-01-19T18:01:28Z")

</div>

Hi Folks,

I need to parse a result that comes in this format :

# ========================= ec2.describe\_instances #=\> [{:aws\_image\_id =\> “ami-e444444d”, :aws\_reason =\> “”, :aws\_state\_code =\> “16”, :aws\_owner =\> “000000000888”, :aws\_instance\_id =\> “i-123f1234”, :aws\_reservation\_id =\> “r-aabbccdd”, :aws\_state =\> “running”, :dns\_name =\> “[domU-12-34-67-89-01-C9.usma2.compute.amazonaws.com](http://domU-12-34-67-89-01-C9.usma2.compute.amazonaws.com)”, :ssh\_key\_name =\> “staging”, :aws\_groups =\> [“default”], :private\_dns\_name =\> “[domU-12-34-67-89-01-C9.usma2.compute.amazonaws.com](http://domU-12-34-67-89-01-C9.usma2.compute.amazonaws.com)”, :aws\_instance\_type =\> “m1.small”, :aws\_launch\_time =\> “2008-1-1T00:00:00.000Z”}, :aws\_availability\_zone =\> “us-east-1b”, :aws\_kernel\_id =\> “aki-ba3adfd3”, :aws\_ramdisk\_id =\> “ari-badbad00”, …, {…}]

When I invoke the method,

puts @ec2.describe\_instances

# the results comes like this :

# aws\_image\_idami-e444444daws\_reasonaws\_state\_codeaws\_owner000000000888aws\_instance\_id i-123f1234aws\_reservation\_idr-aabbccddaws\_staterunningdns\_name domU-12-34-67-89-01-C9.usma2.compute.amazonaws.comssh\_key\_namestagingaws\_groups …

Question :

Is there a way of accessing a specific key, for example : aws\_status ?  
If so, how do I do that ?

Thank you so much.

Regards.

---

<div class="post-metadata">

**Author:** ![oferar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/67e7ee/32.png) [@oferar](https://www.ruby-forum.com/u/oferar)\
**Post date:** [January 19, 2009, 6:46pm UTC](https://www.ruby-forum.com/t/parsing-list-results/196883/2 "2009-01-19T18:46:18Z")

</div>

On Jan 19, 2009, at 12:00 PM, Fernando Ramos wrote:

> ```
> :aws_instance_id => "i-123f1234",
> :aws_availability_zone => "us-east-1b",
> 
> ```
> 
> =========================  
> If so, how do I do that ?
> 
> Thank you so much.
> 
> Regards.

You can:  
require ‘pp’  
pp @ec2.describe\_instances

or just use #inspect: (which is what irb does with the last expression  
anyway)  
p @ec2.describe\_instances  
puts @ec2.describe\_instances.inspect

As for getting the specific key (did you mean ‘aws\_state’?), perhaps  
something like:  
@ec2.describe\_instances.each do |instance\_hash|  
puts “%20s:  
%s”%instance\_hash.values\_at(:aws\_instance\_id, :aws\_state)  
end

```
       i-123f1234: running

```

You can look at: String#%, Kernel.sprintf, Hash#values\_at, and Hash#[]  
(oh yeah, and Enumerable#each) for the details.

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![oferar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/67e7ee/32.png) [@oferar](https://www.ruby-forum.com/u/oferar)\
**Post date:** [January 19, 2009, 6:56pm UTC](https://www.ruby-forum.com/t/parsing-list-results/196883/3 "2009-01-19T18:56:42Z")

</div>

Rob B. wrote:

> On Jan 19, 2009, at 12:00 PM, Fernando Ramos wrote:
> 
> > ```
> > :aws_instance_id => "i-123f1234",
> > :aws_availability_zone => "us-east-1b",
> > 
> > ```
> > 
> > =========================  
> > If so, how do I do that ?
> > 
> > Thank you so much.
> > 
> > Regards.
> 
> You can:  
> require ‘pp’  
> pp @ec2.describe\_instances
> 
> or just use #inspect: (which is what irb does with the last expression  
> anyway)  
> p @ec2.describe\_instances  
> puts @ec2.describe\_instances.inspect
> 
> As for getting the specific key (did you mean ‘aws\_state’?), perhaps  
> something like:  
> @ec2.describe\_instances.each do |instance\_hash|  
> puts “%20s:  
> %s”%instance\_hash.values\_at(:aws\_instance\_id, :aws\_state)  
> end
> 
> ```
> i-123f1234: running
> 
> ```
> 
> You can look at: String#%, Kernel.sprintf, Hash#values\_at, and Hash#[]  
> (oh yeah, and Enumerable#each) for the details.
> 
> -Rob
> 
> Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
> removed\_email\_address@domain.invalid

Hi Rob,

You’ve got it !!! Thank you so much. It is working the way I want now !  
Appreciate it !

Regards,

Fernando.

---

<div class="post-metadata">

**Author:** ![oferar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/67e7ee/32.png) [@oferar](https://www.ruby-forum.com/u/oferar)\
**Post date:** [January 19, 2009, 8:01pm UTC](https://www.ruby-forum.com/t/parsing-list-results/196883/4 "2009-01-19T20:01:05Z")

</div>

Fernando Ramos wrote:

> puts @ec2.describe\_instances
> 
> # the results comes like this :
> 
> aws\_image\_idami-e444444daws\_reasonaws\_state\_codeaws\_owner000000000888aws\_instance\_id  
> i-123f1234aws\_reservation\_idr-aabbccddaws\_staterunningdns\_name  
> domU-12-34-67-89-01-C9.usma2.compute.amazonaws.comssh\_key\_namestagingaws\_groups

puts outputs strings, so it calls .to\_s on its argument.

.to\_s on a hash calls .to\_s on all its keys and values, and mashes them  
together.

Use p @ec2.describe\_instances, or require ‘pp’ and use pp.

> Is there a way of accessing a specific key, for example : aws\_status ?  
> If so, how do I do that ?

p @ec2.describe\_instances[2][:aws\_status]

Now play around with (and read the docs on) Array and Hash!
