ruby - 不确定从 api 返回的是什么 ruby​​ 数据结构

标签 ruby

这是我 Controller 中的内容

class HomeController < ApplicationController

  def index
    require 'open-uri'
    @shakelines = JSON.parse(open("http://api.placemeter.net/api/shake/line/?start=-120&end=0").read())
  end 
end

我不确定@shakelines 包含什么。它在什么数据结构中?数组或散列以及如何使用它。

在我对应的 View 中

<div class="container">
    <div class="row">
        <div class="medium-12 columns"></div>
          <% @shakelines.each do |shakeline| %>
            <ul>
              <li><%= shakeline %></li>
            </ul>
          <% end %>
        </div>
    </div>
</div>

我在输出中得到了这个

["average_line_wait_secs", [0, 0, 0]]

["end", 1396627145]

["timestamps", [1396627020, 1396627080, 1396627140]]

["average_line_length", [0, 0, 0]]

["start", 1396627020]

它看起来像一个数组?但是当我打开 url 时,它看起来像一个散列,但它是一个 json 对象。

如果它是一个数组,我该如何访问数据结构?只使用索引? 和哈希一样。

除了做 <% @shakelines.each do |shakeline| %>什么是<% @shakelines %> ?它抛出一个错误

最佳答案

@shakelines 是一个散列。但是你看到数组是因为使用 Hash#each 迭代哈希产生键值对数组。

require 'json'
response = '{"average_line_wait_secs": [0, 0, 0], "end": 1396627625, "timestamps": [1396627500, 1396627560, 1396627620], "average_line_length": [0, 0, 0], "start": 1396627500}'
shakelines = JSON.parse(response)
shakelines.class
# => Hash
shakelines.each.to_a
# => [["average_line_wait_secs", [0, 0, 0]],
#     ["end", 1396627625],
#     ["timestamps", [1396627500, 1396627560, 1396627620]],
#     ["average_line_length", [0, 0, 0]],
#     ["start", 1396627500]]

关于ruby - 不确定从 api 返回的是什么 ruby​​ 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867689/

相关文章:

c - 为什么我在使用 rb_funcall 调用 Hash#has_key 时会出现段错误?

ruby-on-rails - Mac 上的 Ruby 1.9 - Rails 仍在加载 1.8 库?

ruby - 尝试获取 Google Plus 对某项事件的评论

ruby - 使用 Nokogiri 的 XML 标记内的无效响铃字符

ruby - 无法打开到 127.0.0.1 :9515 rspec testing 的 TCP 连接

ruby - 最简单的树顶语法返回解析错误,只是学习

ruby - Chef节点属性

ruby-on-rails - Rails 3 的良好身份验证

ruby - ruby 中的正则表达式以匹配字符第一次出现和最后一次出现之间的文本

ruby-on-rails - 如何在两个字段中对 ruby​​/rails 进行排序?