【问题标题】:Convert string into Array in rails在rails中将字符串转换为数组
【发布时间】:2016-05-02 17:26:47
【问题描述】:

我从 REST 客户端发送了一个数组并收到如下:"[1,2,3,4,5]"

现在我只想在不使用 Ruby 的 eval 方法的情况下将其转换为数组。我们可以为此使用任何 Ruby 的默认方法吗?

 "[1,2,3,4,5]" => [1,2,3,4,5]

【问题讨论】:

  • API 是否使用 JSON 或 YAML 等特定格式?
  • ...因为如果没有,考虑采用一个,反正你需要一个序列化格式。
  • API 使用 JOSN 格式
  • @GhulamJilani 您应该强烈考虑使用 Ruby 的 JSON 库,如下面的Cary Swoveland's answer 所示。

标签: ruby-on-rails json ruby postman


【解决方案1】:
require 'json'

JSON.parse "[1,2,3,4,5]"
  #=> [1, 2, 3, 4, 5] 

JSON.parse "[[1,2],3,4]"
  #=> [[1, 2], 3, 4] 

【讨论】:

  • 考虑到它的投票,这应该是公认的答案
  • @M.Habib 同意它涵盖从“[1,2,3]”到 '[“它涵盖”、“any,scenario”、[“this”、“too”] 的任何场景]'
【解决方案2】:

也许是这个?

   s.tr('[]', '').split(',').map(&:to_i)

【讨论】:

  • 警告:这种方法可以有效地扁平化多维数组。
  • 使用'["12", "45"]'.tr('[]','').map(&:to_i)返回错误:undefined method map
  • tbh,此时,您应该只使用JSON.parse 哈哈。但如果你真的想要,'["12", "45"]'.tr('["]','').split(',')
  • 第二个注意事项:如果您希望它为'2.2' 之类的非整数或'2sdf' 之类的错误数据引发ArgumentError,则将末尾的.map(&:to_i) 替换为.map { |x| Integer(x) }。 (或者 .map { |x| Float(x) } 如果你想要浮动)。
【解决方案3】:

如果你想避开eval,还有另一种方式:

"[1,2,3,4,5]".scan(/\d+/).map(&:to_i) #assuming you have integer Array as String
#=> [1, 2, 3, 4, 5]

【讨论】:

  • 使用这个'[88,89,100]'.scan(/\d/)返回["8", "8", "8", "9", "1", "0", "0"]
  • @VishwasNahar 将模式调整为\d+ 将解决这个问题。我已经更新了我的答案。谢谢
  • PS:你绝对应该使用JSON.parse@VishwasNahar
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 2015-11-11
  • 2017-11-27
  • 2017-09-12
  • 2021-05-09
  • 2023-03-19
相关资源
最近更新 更多