我有一个数组的字符串表示形式:
val1 = "[[\":one\", \":two\"], [\":four\", \":one\"]]"
将其转换为以下内容的最佳方法是:
val2 = [[:one,:two], [:four, :one]]
数组的维度可以 25 x 25 。
答案 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]]
我想我应该为downvotes做好准备,但你可以使用eval
:
eval(val1).map{|x| x.map(&method(:eval))}
# => [[:one, :two], [:four, :one]]
答案 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代表空终止字符串。