2011-10-20 77 views
0

我是ruby的新手,并在过去几天开始使用它,所以如果我要求一些非常基本的东西,我很抱歉。红宝石 - 将哈希格式化数组转换为实际哈希

我正在寻找一种方法将以下数组转换为散列。

arr => 

{"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"} 

其中arr.length为1

我试图要解决它,但不能将其转换为一个哈希值。

我需要这个,因为Testlink xmlrpc以上面显示的格式进行响应。

对此的任何帮助将有很大的帮助。

谢谢。

+0

你的数组已经是一个散列或你的代码中缺少的东西 – lkuty

+0

我认为缺少一些东西。我没有看到数组。 –

+0

@Ray - 实际的xmlrpc响应是“[{”id“=>”xxx“,”name“=>”show all“,”parent_id“=>”yyy“,”tsuite_name“=>”show system“, “tc_external_id”=>“zzz”}]“ – Anand

回答

5

欢迎来到Ruby!

下面的构造是哈希。

{"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"} 

如果它是一个数组,它将被括号括起来:

[{"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"}] 

但我认为你给予的是:

{ "arr" => {"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"} } 

上述目的是哈希在哈希内。 length方法报告1,因为散列只包含一个密钥,即arr

您可以用class方法测试类变量:

$ irb 
>> var = { "arr" => {"id"=>"xxx", "name"=>"show all" } } 
=> { "arr" => {"id"=>"xxx", "name"=>"show all" } } 
>> var.class 
=> Hash 

如果你需要的是内部的哈希值,然后抓住它,像这样:

>> keep = var["arr"] 
=> {"id"=>"xxx", "name"=>"show all" } 

如果我完全误解了你的问题,请澄清。

+0

卡里克 - 感谢您的回应。它仅仅是一个数组,输出仅在你的回复中显示的时候被大括号包围。有没有办法将其转换为散列? – Anand

+0

当然,你可以使用它的大括号内的索引,换句话说'arr [0]'从数组中获取任何项。 Ruby中的一个常见捷径是使用'first'方法从数组中获取第一项:'arr.first'。 – karrick

+0

很好,它工作,谢谢。 – Anand