ruby-on-rails - Rails 如何显示 JSON 请求的哈希值

标签 ruby-on-rails json ruby hash

我正在尝试显示 JSON 请求中哈希的内部级别。

这是 JSON 请求的返回:

{
    "results": [
    {
    "utc_offset": -25200000,
    "venue": {
      "zip": "94305",
      "country": "us",
      "localized_country_name": "USA",
      "city": "Stanford",
      "address_1": "750 Escondido Road",
      "name": "Ray's - Graduate Community Center",
      "lon": -122.158386,
      "id": 5612552,
      "state": "CA",
      "lat": 37.423393,
      "repinned": false
    },
    "status": "upcoming"
    },
    {
    "utc_offset": -25200000,
    "venue": {
      "zip": "94306",
      "country": "us",
      "localized_country_name": "USA",
      "city": "Palo Alto",
      "address_1": "25 Churchill Ave",
      "name": "Palo Alto High School",
      "lon": -122.154121,
      "id": 1566333,
      "state": "CA",
      "lat": 37.433186,
      "repinned": false
    },
    "status": "upcoming"
    },
    {
    "utc_offset": -25200000,
    "venue": {
      "zip": "94306",
      "country": "us",
      "localized_country_name": "USA",
      "city": "Palo Alto",
      "address_1": "25 Churchill Ave",
      "name": "Palo Alto High School",
      "lon": -122.154121,
      "id": 1566333,
      "state": "CA",
      "lat": 37.433186,
      "repinned": false
    },
    "status": "upcoming"
    }
    ]
    }
}

我提到:How to use JSON data returned by API call in Rails 4 , How to get a second level field from json file using ruby , Why do I get "no implicit conversion of String into Integer (TypeError)"? , How to access JSON in Rails?

这帮助我做到了这一点,如果我使用 @result = @api_response["results"][0]["venue"]["指定数组索引,我可以显示哈希的内部级别name"] 返回“Ray's - 研究生社区中心”。这就是我想要显示的内容,但我想显示列表中所有 field 的名称,而不仅仅是索引 [0] 处的名称。但我不确定如何迭代索引。

我还可以使用 @result = @api_response["results"] 显示哈希结果并通过使用进行迭代:

<% @result.each do |i| %>
  <%= i["venue"] %>
<% end %> 

返回:

{"zip"=>"94305", "country"=>"us", "localized_country_name"=>"USA", "city"=>"Stanford", "address_1"=>"750 Escondido Road", "name"=>"Ray's - Graduate Community Center", "lon"=>-122.158386, "id"=>5612552, "state"=>"CA", "lat"=>37.423393, "repinned"=>false} 
{"zip"=>"94305", "country"=>"us", "localized_country_name"=>"USA", "city"=>"Stanford", "address_1"=>"750 Escondido Road", "name"=>"Ray's - Graduate Community Center", "lon"=>-122.158386, "id"=>5612552, "state"=>"CA", "lat"=>37.423393, "repinned"=>false} 
{"zip"=>"94306", "country"=>"us", "localized_country_name"=>"USA", "city"=>"Palo Alto", "address_1"=>"25 Churchill Ave", "name"=>"Palo Alto High School", "lon"=>-122.154121, "id"=>1566333, "state"=>"CA", "lat"=>37.433186, "repinned"=>false} 
{"zip"=>"94306", "country"=>"us", "localized_country_name"=>"USA", "city"=>"Palo Alto", "address_1"=>"25 Churchill Ave", "name"=>"Palo Alto High School", "lon"=>-122.154121, "id"=>1566333, "state"=>"CA", "lat"=>37.433186, "repinned"=>false} 

{"zip"=>"94306", "country"=>"us", "localized_country_name"=>"USA", "city"=>"Palo Alto", "address_1"=>"25 Churchill Ave", "name"=>"Palo Alto High School", "lon"=>-122.154121, "id"=>1566333, "state"=>"CA", "lat"=>37.433186, "repinned"=>false} 
{"zip"=>"94306", "country"=>"us", "localized_country_name"=>"USA", "city"=>"Palo Alto", "address_1"=>"25 Churchill Ave", "name"=>"Palo Alto High School", "lon"=>-122.154121, "id"=>1566333, "state"=>"CA", "lat"=>37.433186, "repinned"=>false} 

但是当我尝试使用这个时:

<% @result.each do |i| %>
  <%= i["venue"]["name"] %> <br />
<% end %> 

我收到一个未定义的方法[]' for nil:NilClass`错误,它不允许我访问我试图显示的“venue”内的“name”。

我走在正确的道路上吗?有没有更好的方法来显示哈希的内部级别?任何反馈都会有所帮助。谢谢!

最佳答案

您确定 results 数组中的每个对象都有一个 venue 字段吗?

在尝试访问venue字段之前,请确保查看该对象是否确实存在。在您的 Controller 中,添加此

@result = @api_response["results"].reject {|obj| obj.nil?}

这将删除数组中任何nil的对象。

如果对象存在但字段 venue 不存在怎么办?

<% @result.each do |i| %>
  <%= i.has_key? "venue" ? i["venue"]["name"] : 'Location unspecified' %> <br />
<% end %> 

如果这看起来很困惑,您也可以将其移至辅助方法,例如

def venue_name(obj)
  obj.has_key? "venue" ? obj["venue"]["name"] : 'Location unspecified'
end

然后在 View 中使用它。

 <% @result.each do |i| %>
  <%= venue_name(i) %> <br/>
 <% end %> 

关于ruby-on-rails - Rails 如何显示 JSON 请求的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39379219/

相关文章:

json - 将嵌套的主干关系模型序列化/反序列化为 JSON

php - 我的 sql 查询在 json 响应中返回 3 行相同的数据类型

ruby - Nokogiri 相当于 Hpricot 的 html 方法

ruby-on-rails - 如何降级 gemfile 中的 gem?

ruby-on-rails - rvm --default 不设置 1.9.2 ubuntu 11.10 + 无法安装 rails

ruby-on-rails - 从 Ruby 到 Azure 的 Redis::TimeoutError

jquery - 如何在标准 Web 表单 .Net 中返回 JSON 对象

ruby-on-rails - 用户可以 "read"范围记录的常见方法是什么?

ruby-on-rails - 为什么这个 Rails 事务无法锁定?

ruby-on-rails - 检索在 ActiveRecord/Rails 中没有关系的对象