这是我 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/