1

このようなAPIからの出力があります...(文字列)

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

配列ではなく文字列です。それを配列に変換してから、ネストされた配列の各配列の最初の 2 つの要素を次のように抽出します。

[2121212,212121],[2323232,23232323]

このルビーを行うための最良の方法は何ですか? 正規表現と抽出を使用できますが、基本的に文字列はすでに配列ですが、クラスは文字列です。

私は試した

array.push(response)

しかし、それは文字列を 1 つの要素として配列に入れるだけです。いいのは to_array メソッドだと思います

4

3 に答える 3

2

eval(シュラッダー...)でない場合は、とにかく正規表現を使用する必要があります。これは最短のものです

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

=>[["2121212", "212121"], ["2323232", "23232323"], ["2424242", "24242424"]]
于 2012-04-23T12:51:55.750 に答える
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]]
于 2012-04-23T10:08:20.840 に答える
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]]
于 2012-04-23T13:01:42.730 に答える