Ruby on rails 在ruby中,如何将json中包含的json数组解析为类?

Ruby on rails 在ruby中,如何将json中包含的json数组解析为类?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用气泡包装库,它可以很好地将这个json解析为Item类,我的问题是如何提取通知的值。我曾尝试以与父级相同的方式解析通知的键/值,但在解析的行中出现错误(无效的选择器发送到0x34..),我猜只要我只读取了成员属性,它就不再是有效的json了?谢谢 { "users": [ { "id": 5, "username": "96u39nos9u", "password": "estanimiautem", "notif

我正在使用气泡包装库,它可以很好地将这个json解析为Item类,我的问题是如何提取通知的值。我曾尝试以与父级相同的方式解析通知的键/值,但在解析的行中出现错误(无效的选择器发送到0x34..),我猜只要我只读取了成员属性,它就不再是有效的json了?谢谢

{
"users": [
    {
        "id": 5,
        "username": "96u39nos9u",
        "password": "estanimiautem",
        "notifications": [
            {
                "notification": {
                    "body": "Eum dolorem aliquam animi ut."
                }
            },
            {
                "notification": {
                    "body": "verities"
                }
            }
        ]
    }
  ]
}
要解析为对象的代码段(除通知外有效)


我认为一个好的开始是删除代码中所有不必要的复杂性。这样就更容易诊断出发生了什么

BW::HTTP.get("http://resturl/api/v1/users") do |response|                                                              

  mydata = BW::JSON.parse(response.body.to_s)["users"]

  @data = mydata.collect{|i| Item.new(i)}


  @table.dataSource = self
  @table.delegate = self
  self.view.addSubview @table
end  


抱歉,这个Ruby代码有点难理解。“p”到底是做什么的?此外,如果您的块不止一行,最好使用do end块,而不是使用“{}”。因此,例如,最好使用mydata.each do | item |。。。结束。@freddyrangel p只是打印到控制台-这是一个ruby运动项目,顺便说一句,我没有提到“p”类似于“puts”,但显示的是对象的检查值,而不是to_s值,因此更易于调试。不能在运动项目之外要求bubblewrap,所以我们很难调试它。你不能只使用核心
JSON
库吗?plus
p
比type:D短三个字符
class Item                                                                                                                                                  
  PROPERTIES = [:id, :name, :status, :email, :notifications]
  PROPERTIES.each { |prop|
    p prop
    attr_accessor prop
  }

  def initialize(hash = {})
    p "initialize"
    p hash
    p "end initialize"
    hash.each { |key, value|
      p key
      p value
      if key.to_s == "notifications"
        // pass the values into a local array or separate class?
      end
      if PROPERTIES.member? key.to_sym
        self.send((key.to_s + "=").to_s, value)
      end
    }
  end                                                                                                                                                       
end    
BW::HTTP.get("http://resturl/api/v1/users") do |response|                                                              

  mydata = BW::JSON.parse(response.body.to_s)["users"]

  @data = mydata.collect{|i| Item.new(i)}


  @table.dataSource = self
  @table.delegate = self
  self.view.addSubview @table
end  
class Item                                                                                                                                                  
  attr_accessor :id, :name, :status, :email, :notifications


  def initialize(hash = {})
    @id = hash['id']
    @name = hash['name']
    @status = hash['status']
    @email = hash['email']
    @notification = hash['notification']
  end                                                                                                                                                       
end