一个字符串(看起来像一个数组)到一个数组Ruby中

时间:2012-04-23 09:22:17

标签: ruby

我的API输出看起来像这样......(它是一个字符串)

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

它是一个字符串 - 不是数组。我想将它转换为数组,然后将嵌套数组中每个数组中的前两个元素提取到:

[2121212,212121],[2323232,23232323]

做红宝石的最佳方法是什么?我可以使用regexp和extract - 但基本上字符串已经是一个数组,但是类是一个字符串。

我试过

array.push(response)

但是这只是将字符串作为一个元素放入数组中。我想最好的是to_array方法

3 个答案:

答案 0 :(得分:2)

如果不是eval(shrudder ......),你将需要使用正则表达式,这是最短的

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

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

答案 1 :(得分:0)

使用eval非常糟糕,但我没有其他简单的选择。

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

答案 2 :(得分: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]]