将字符串化数组转换回数组

时间:2013-06-11 22:12:50

标签: ruby-on-rails postgresql hstore

我使用hstore与Postgres 9.2和Rails 3.2来存储我的对象:

class User
  user_hstore = {:user_id =>"123", :user_courses => [1,2,3]}
end

现在,当我检索user_courses时,我得到一个这样的字符串: '[1, 2, 3]'

如何将此字符串转换为Rails数组?更好的是,有没有办法在hstore对象中存储数组,以便Rails自动将其作为数组类型检索?

4 个答案:

答案 0 :(得分:8)

JSON.parse "[\"1018\", \"1037\", \"1045\", \"1042\"]"
#=> ["1018", " 1037", " 1045", " 1042"]

答案 1 :(得分:6)

为什么不使用eval

eval('[1, 2, 3]')
#=> [1, 2, 3]

显然,不要在任意或用户输入的数据上执行此操作,但在您显示的整数数组上,它非常安全。

答案 2 :(得分:1)

将其转换为数组:

user_courses.gsub('[', '').gsub(']', '').split(",")

为了使检索更简单,您可以通过执行

将其存储为字符串
user_hstore = {:user_id =>"123", :user_courses => '1,2,3'}

答案 3 :(得分:1)

只是把另一顶帽子扔进戒指,这就像Vimsha的回答一样,但你可以做的更短,更甜蜜:

"[1,2,3,4]"[1..-2].split(",")

在你的情况下可能是:

user_courses[1..-2].split(",")

编辑:   如果速度是一个问题我做了一个快速的基准,可以找到here。只做几件物品不是一个很大的区别,但10,000件物品+你可以开始看到差异。这是100,000件物品:

  # "[1,2,3,4]"[1..-2].split(",")
  0.110000   0.000000   0.110000 (  0.114739)

  # "[1,2,3,4]".gsub("[", "").gsub("", "]").split(",")
  1.080000   0.000000   1.080000 (  1.081227)