2014-06-24 64 views
0

我有一个包含数组的字符串;从红宝石串内拉数组

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

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

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

回答

2

它真的取决于字符串。一个字符串实际上不能包含一个数组 - 它可以包含一些文本,只要给定一个合适的解析器就可以将其解析为一个数组。

在这种情况下,您的字符串恰好是一个数组的一个有效的JSON表示,所以你可以做:

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

,你会得到这些字符串数组。

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

这将执行任意代码。如果除了你以外的任何人对'x'的内容有任何影响,他们可能会控制你的计算机。它*一般*不是一个好主意。 – Chuck

+0

@Chuck你是对的。只使用'eval'不是一个好主意。我正在编辑我的答案,在'eval'上面使用绑定。谢谢 – karthikr

+0

AFAIK很难提出一个没有潜在可利用性的绑定,所以我仍然对这样做感觉不好。 – Chuck

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"]