¿Cómo imprimo el group_id del objeto devuelto?
Lo siguiente se devuelve desde una función. Quiero imprimir el group_id o tal vez devolver el group_id
{ :security_groups=>[ { :description=>"Created By ManageIQ", :group_name=>"MIQ_019", :ip_permissions=>[ { :from_port=>22, :ip_protocol=>"tcp", :ip_ranges=>[ { :cidr_ip=>"0.0.0.0/0", :description=>nil } ], :ipv_6_ranges=>[], :prefix_list_ids=>[], :to_port=>22, :user_id_group_pairs=>[] } ], :owner_id=>"943755119718", :group_id=>"sg-0c2c5f219f1bafc1a", :ip_permissions_egress=>[ { :from_port=>nil, :ip_protocol=>"-1", :ip_ranges=>[ { :cidr_ip=>"0.0.0.0/0", :description=>nil } ], :ipv_6_ranges=>[], :prefix_list_ids=>[], :to_port=>nil, :user_id_group_pairs=>[] } ], :tags=>[], :vpc_id=>"vpc-d817c1b3" } ], :next_token=>nil } Esta es la función: quiero return security_group.group_id
def describe_security_group ( group_name ) ec2 = get_aws_client security_group = ec2.describe_security_groups( filters: [ {name: 'group-name', values: [ group_name ]}] ) puts "Describing security group '#{group_name}' with ID " \ "'#{security_group}'" return security_group rescue StandardError => e puts "Error describing security group: #{e.message}" return endPor lo tanto, el valor devuelto parece un hash, o puede convertirlo en un hash exactamente.
Para el caso de una matriz de un elemento, puede usar simplemente el método de excavación de Ruby.
Y de acuerdo con su dato y comentario a continuación, podemos acceder al elemento necesario como este:
# from your ec2 api call security_group = ec2.describe_security_groups(...) # Result value is stored in `security_group` variable, # and looks exactly like hash below { :security_groups=>[ { :description=>"Created By ManageIQ", :group_name=>"MIQ_019", :ip_permissions=>[ { :from_port=>22, :ip_protocol=>"tcp", :ip_ranges=>[ { :cidr_ip=>"0.0.0.0/0", :description=>nil } ], :ipv_6_ranges=>[], :prefix_list_ids=>[], :to_port=>22, :user_id_group_pairs=>[] } ], :owner_id=>"943755119718", :group_id=>"sg-0c2c5f219f1bafc1a", :ip_permissions_egress=>[ { :from_port=>nil, :ip_protocol=>"-1", :ip_ranges=>[ { :cidr_ip=>"0.0.0.0/0", :description=>nil } ], :ipv_6_ranges=>[], :prefix_list_ids=>[], :to_port=>nil, :user_id_group_pairs=>[] } ], :tags=>[], :vpc_id=>"vpc-d817c1b3" } ], :next_token=>nil } # And this is a target value, that you can store in another one, # return from method or simply print to output security_group.dig(:security_groups) .try(:[], 0) .dig(:group_id) => "sg-0c2c5f219f1bafc1a" Pero si necesita buscar en una matriz con múltiples elementos, los métodos del módulo Enumerable de Ruby podrían ser útiles (como select o reject ).
ACTUALIZAR con OpenStruct , si prefiere tales llamadas a métodos con notación de puntos:
json = security_group.to_json os = JSON.parse(json, object_class: OpenStruct) os.security_groups.first.group_id => "sg-0c2c5f219f1bafc1a"