我有以下数组:
["{"id":1,"name":"A"}", "{"id":20,"name":"B"}"]
我从Redis获得此数组,我需要迭代并访问ID和名称键。我真的需要在每次迭代中致电json.parse?
如何迭代并显示数据?
首先,循环没有错:
arr = ["{"id":1,"name":"A"}", "{"id":20,"name":"B"}"]
arr.map {|raw| JSON.parse(raw) }
现在,如果出于任何原因您要避免循环,请有一些有趣的选择:
arr = ["{"id":1,"name":"A"}", "{"id":20,"name":"B"}"]
JSON.parse "[#{arr.join(",")}]"
so:与","一起加入数组,制作我们在" []"之间放置的字符串 - 此将您的JSON编码值列表转换为一个JSON编码数组。
这是这样说的 - 循环没有错。
在您的问题上,如果您需要使用地图方法执行此操作,您就已经在评论中得到了答案,也可以从Martin的替代方案中获得答案。
这是一种将逻辑与视图分开的方法,例如Sergio建议
在您的控制器,型号或辅助文件中的某个地方
class Visitor
require 'json'
def initialize string
hash = JSON.parse(string)
@id = hash["id"]
@name = hash["name"]
end
def to_s
"#{@id}: #{@name}"
end
end
class Visitors
include Enumerable
@@visitors = []
def initialize array
array.map{|visitor| @@visitors << Visitor.new(visitor)}
end
def each
@@visitors.map{|visitor| yield visitor}
end
end
array = ["{"id":1,"name":"A"}", "{"id":20,"name":"B"}"]
visitors = Visitors.new(array)
和您的视图
visitors.each do |visitor|
<%=visitor%>
end
# 1: A
# 20: B