在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中将字符串转换为数组的主要内容,如果未能解决你的问题,请参考以下文章