将嵌套数组的字符串表示形式转换为Array

时间:2015-06-30 02:56:53

标签: ruby-on-rails arrays ruby string ruby-on-rails-4

我有一个数组的字符串表示形式:

val1 = "[[\":one\", \":two\"], [\":four\", \":one\"]]"

将其转换为以下内容的最佳方法是:

val2 = [[:one,:two], [:four, :one]]

数组的维度可以 25 x 25

5 个答案:

答案 0 :(得分:8)

使用JSON.parse

require 'json'
val2 = JSON.parse val1
# => [[":one", ":two"], [":four", ":one"]]

或者您可以将它们转换为这样的符号:

val2.map{|a,b| [a.sub(/^:/,'').to_sym, b.sub(/^:/,'').to_sym]}
# => [[:one, :two], [:four, :one]]

答案 1 :(得分:4)

您可以使用YAML.load

require 'yaml'    
YAML.load(val1.delete ':').map{|x| x.map(&:to_sym)}
# => [[:one, :two], [:four, :one]]

Demonstration

我想我应该为downvotes做好准备,但你可以使用eval

eval(val1).map{|x| x.map(&method(:eval))}
# => [[:one, :two], [:four, :one]]

Demonstration

答案 2 :(得分:2)

eval val1.tr('"','') #=> [[:one, :two], [:four, :one]]

答案 3 :(得分:0)

eval val1.gsub '"',''   #=> [[:one,:two], [:four, :one]]

答案 4 :(得分:0)

val1 =“[[\”:one \“,\”:two \“],[\”:four \“,\”:one \“]]” put val1.unpack('Z Z ')

Descrition: 'unpack'解码字符串(可能包含二进制数据)。根据格式字符串,它返回提取的每个值的数组。在上面的代码中,Z代表空终止字符串。