从Ruby字符串中拉出数组

时间:2014-06-24 23:00:25

标签: ruby string

我有一个包含数组的字符串;

"["item1","item2","item3"]"  

是否有一种灵巧的Ruby方式将其转换为此;

["item1","item2","item3"]

3 个答案:

答案 0 :(得分:3)

Ruby有一个eval function

irb(main):003:0> x = '["item1","item2","item3"]'
=> "[\"item1\",\"item2\",\"item3\"]"
irb(main):004:0> eval(x)
=> ["item1", "item2", "item3"]
irb(main):005:0> 

使用eval可能不安全,因此您可能也想考虑使用Binding

答案 1 :(得分:2)

这真的取决于字符串。一个字符串实际上不能包含一个数组 - 它只能包含一些可以在给定适当的解析器的情况下解析成数组的文本。

在这种情况下,您的字符串碰巧是数组的有效JSON表示,因此您可以这样做:

JSON.parse("[\"item1\",\"item2\",\"item3\"]")

你将获得带有这些字符串的数组。

答案 2 :(得分:0)

如果你写

str = '"["item1","item2","item3"]"'
  #=> "\"[\"item1\",\"item2\",\"item3\"]\""

str =<<_
"["item1","item2","item3"]"
_
  #=> "\"[\"item1\",\"item2\",\"item3\"]\""

str = %q{"["item1","item2","item3"]"} 
  #=> "\"[\"item1\",\"item2\",\"item3\"]\""

然后你可以写

str.scan(/[a-z0-9]+/)
  #=> ["item1", "item2", "item3"]