2012-04-23 5 views
1

내가 같이하는 API의 출력을 가지고 ... (그 문자열)배열 루비

[[2121212,212121,asd],[2323232,23232323,qasdasd]] 

그 문자열로 문자열 (그게 전부가 배열 모양) -하지 배열.

[2121212,212121],[2323232,23232323] 

이 루비를 할 수있는 가장 좋은 방법은 무엇입니까 : 나는 배열로 변환 한 다음에 중첩 된 배열의 각 배열의 첫 번째 두 요소를 추출 할? regexp와 extract를 사용할 수는 있지만 기본적으로 문자열은 이미 배열이지만 클래스는 문자열입니다.

나는
array.push(response) 

을 시도했지만 그것은 단지 하나 개의 요소로 배열에 문자열을 넣어. 내가 뭘 좋을지 짐작하는 방법은 to_array이다.

+0

[Ruby : 중첩 배열의 문자열 표현을 구문 분석하여 Array에?] (http://stackoverflow.com/questions/4477127/ruby-parsing-a-string-representation-of-nested-arrays) -into-an-array) – Mischa

+0

이것은 같지 않습니다. JSON이나 eval은 따옴표없이 문자열을 처리하지 않습니다. 문자열이'asd'처럼 간단하다면 regexp에 의해 인용 부호를 추가 한 다음 JSON.parse 또는 eval을 사용합니다 :'eval str.gsub (/ ([z-Z] +) /) ''\ 1 '')' –

+0

Lukas - 문자열이 변경되어 죄송합니다. 항상 구문 상 동일합니다. [element, element, element] .to_json 메서드를 호출하여 "[element, element, element '] –

답변

0

이되어 가정 할 JSON 응답이 경우 어쨌든 정규 표현식을 사용해야합니다 (그렇다면, 그것이 심하게 잘못된 당신처럼 당신이 뭔가를 쓸 수)이 담당하는 사람들에게 이야기해야합니다

require 'json' 

input= '[[2121212,212121,Asd],[2323232,23232323,qasdasd]]' 
input.gsub!(/([A-Za-z ]+)/,'"\1"') 
json = JSON.parse input 
output = json.map{|x| x[0...2]} 
p output 

를 인쇄
[[2121212, 212121], [2323232, 23232323]] 
+0

코드가 유효한 json을 파싱하는 경우 이미 인용 된 문자열을 인용하지 않는 방식으로 정규식을 개선해야합니다. 하지만 나는 너에게 맡길거야. :) –

0

평가판을 사용하는 것은 나쁘지 만 다른 쉬운 옵션은 없다.

test_str = "[[2121212,212121,asd],[2323232,23232323,qasdasd]]" 
test_str.gsub!(/([a-z]+)/) do 
    "'#{$1}'" 
end 
=> "[[2121212,212121,'asd'],[2323232,23232323,'qasdasd']]" 
test_array = eval(test_str) 
=> [[2121212, 212121, "asd"], [2323232, 23232323, "qasdasd"]] 
test_array.each do |element| 
    element.delete(element.last) 
end 
=> [[2121212, 212121], [2323232, 23232323]] 
+0

당신은 확실히'eval' 이외의 다른 옵션을 가지고 있습니다. 즉 JSON.parse입니다. 또한 gsub은 블록없이 쓸 수 있습니다 :'str.gsub! (/ ([az] +) /' – d11wtq

+0

제안에 감사하지만 JSON.parse ("[[2121212,212121, asd], [2323232,23232323, qasdasd]]") JSON :: ParserError : 399 : 예기치 않은 토큰 'asd], [2323232,23232323, qasdasd]]' –

+0

@soundar :하지만'' '# {$ 1} 행을 변경했을 때''JSON.parse'd와 같이 쉽게 평가할 수 있습니다. } '''을 ""\ "# $ 1 \" "'. 유효한 JSON 인'[[21212,212, "asd"], ...] '와 같은 것입니다. – Ashe

2

당신은 (shrudder ...) 평가하지,이 짧은 한

str = "[[2121212,212121,asd],[2323232,23232323,qasdasd],[2424242,24242424,qasdasd]]" 
p str.scan(/(\d+),(\d+)/) 

=>[["2121212", "212121"], ["2323232", "23232323"], ["2424242", "24242424"]]