배열이 포함 된 문자열이 있습니다.Ruby 문자열 내부에서 배열 가져 오기
"["item1","item2","item3"]"
여기로 변환 할 수있는 매끄러운 루비 방법이 있습니까?
["item1","item2","item3"]
배열이 포함 된 문자열이 있습니다.Ruby 문자열 내부에서 배열 가져 오기
"["item1","item2","item3"]"
여기로 변환 할 수있는 매끄러운 루비 방법이 있습니까?
["item1","item2","item3"]
정말 문자열에 따라 다릅니다. 문자열은 실제로는 배열을 포함 할 수 없습니다. 적절한 파서가 주어진 배열로 파싱 될 수있는 텍스트를 포함 할 수 있습니다. 이 경우
, 당신의 문자열 배열의 유효한 JSON 표현 될 일이, 그래서 당신은 다만 할 수 있습니다JSON.parse("[\"item1\",\"item2\",\"item3\"]")
그리고 당신은 그 문자열이 배열을 얻을 수 있습니다.
루비는 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
을 사용하는 것이 안전하지 않을 수 있습니다.
당신은
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"]
이 뜻을 쓸 수 있습니다 작성하는 경우 임의의 코드를 실행하십시오. 누군가 당신이'x'의 내용에 영향을 미쳤다면 잠재적으로 여러분의 컴퓨터를 제어 할 수 있습니다. 그것은 일반적으로 좋은 생각이 아닙니다. – Chuck
@Chuck 네 말이 맞아. 단지'eval'을 사용하는 것은 좋은 생각이 아닙니다. 나는 Bindings를'eval'의 맨 위에 사용하기 위해 답을 편집하고있었습니다. 감사합니다 – karthikr
AFAIK 잠재적으로 악용 될 수없는 바인딩을 생각해 내기가 매우 어렵 기 때문에이 작업을 수행하는 것에 대해 여전히 기분이 좋지 않습니다. – Chuck