2014-06-24 2 views

답변

2

정말 문자열에 따라 다릅니다. 문자열은 실제로는 배열을 포함 할 수 없습니다. 적절한 파서가 주어진 배열로 파싱 될 수있는 텍스트를 포함 할 수 있습니다. 이 경우

, 당신의 문자열 배열의 유효한 JSON 표현 될 일이, 그래서 당신은 다만 할 수 있습니다

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

그리고 당신은 그 문자열이 배열을 얻을 수 있습니다.

3

루비는 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> 

당신이 너무 Binding 사용을 고려할 수 있도록, eval을 사용하는 것이 안전하지 않을 수 있습니다.

+1

이 뜻을 쓸 수 있습니다 작성하는 경우 임의의 코드를 실행하십시오. 누군가 당신이'x'의 내용에 영향을 미쳤다면 잠재적으로 여러분의 컴퓨터를 제어 할 수 있습니다. 그것은 일반적으로 좋은 생각이 아닙니다. – Chuck

+0

@Chuck 네 말이 맞아. 단지'eval'을 사용하는 것은 좋은 생각이 아닙니다. 나는 Bindings를'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"]