如何解析一系列哈希(字符串)



我有以下数组:

["{"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

最新更新