2014-06-24 65 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"]