代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Zurek

Rails哈希输出

  •  0
  • Rodrigo Zurek  · 技术社区  · 13 年前

    这是我的问题,我从一个请求中获取一个变量,并将其存储在@response中。

    然后我调试响应,调试(@response),并获得以下输出:

    --- !ruby/hash:Hashie::Mash
    results:
    - !ruby/hash:Hashie::Mash
      id: '33098557'
      firstName: john
      lastName: star
      relationship: self
      photo: https://foursquare.com/img/blank_boy.png
      tips: !ruby/hash:Hashie::Mash
        count: 0
      lists: !ruby/hash:Hashie::Mash
        groups:
        - !ruby/hash:Hashie::Mash
          type: created
          count: 1
          items: []
      gender: male
      homeCity: mexico
      bio: ''
      contact: !ruby/hash:Hashie::Mash
        email: jhon@hotmail.com
    unmatched: !ruby/hash:Hashie::Mash
      email: []
    

    我可以通过键入@response.results获得结果,并通过以下方式进行调试:

    ---
    - !ruby/hash:Hashie::Mash
      id: '33098557'
      firstName: john
      lastName: star
      relationship: self
      photo: https://foursquare.com/img/blank_boy.png
      tips: !ruby/hash:Hashie::Mash
        count: 0
      lists: !ruby/hash:Hashie::Mash
        groups:
        - !ruby/hash:Hashie::Mash
          type: created
          count: 1
          items: []
      gender: male
      homeCity: mexico
      bio: ''
      contact: !ruby/hash:Hashie::Mash
        email: jhon@hotmail.com
    

    但我无法获取电子邮件或名字等内部属性,我如何访问这些属性???

    1 回复  |  直到 13 年前
        1
  •  3
  •   deefour    13 年前

    @response 是的一个实例 Hashie::Mash 虽然 @response.results 是的一个实例 Array ,因此您需要访问要为其接收结果的数组的索引。

    @response.results[0].firstName
    @response.results[0].contact.email
    

    将返回的值 firstName email 分别是第一个结果的。您可以循环浏览响应 (如果碰巧有多个结果,则获取所有结果) 具有

    @response.results.each do |result|
      result.firstName
      result.contact.email
    end
    

    如果总是只有一个 result 您也可以使用Ruby的 .first 方法

    @response.results.first.email
    # ...
    
    推荐文章