在rails中将字符串转换为数组

Posted

技术标签:

【中文标题】在rails中将字符串转换为数组【英文标题】:Convert string into Array in 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 所示。 【参考方案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

以上是关于在rails中将字符串转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中将 JSON 字符串转换为 JSON 对象

在Java中将字符串转换为“字符”数组

pyspark 在循环中将数组转换为字符串

如何在Java中将对象数组转换为字符串数组

如何在python中将数组字符串转换为数组[重复]

如何在 C++ 中将字符串转换为 char 数组?