0

我有以下 JSON 转换为哈希:

<%
  json = '{
    "speed": 50,
    "braking": 50,
    "time_on_task": 50
  }'
  json = JSON.parse(json)
%>

目前我只是遍历它们并显示它们:

<ul>
  <% json.each do |t| %>
      <li><%= "<b>#{t.first.humanize}</b>: #{t.last}".html_safe %></li>
  <% end %>
</ul>

但是,我想构建一个可以通过键名选择特定项目的方法。例如show_score(json, 'speed')

我试过了:

def show_score(hash, key)
  hash.select { |k| k == key }
end

这只是返回:{"speed"=>50}

所以我尝试了:

hash.select { |k, h| "<b>#{k.humanize}</b>: #{h}".html_safe if k == key }

但它返回相同的...

如果键匹配,我怎样才能以我想要的格式返回字符串?

4

2 回答 2

3
def show_score(hash, key)
  "<b>#{key.humanize}</b>: #{hash[key]}"
end

我会改变这个

<%
  json = '{
    "speed": 50,
    "braking": 50,
    "time_on_task": 50
  }'
  json = JSON.parse(json)
%>

进入

<%
  hash = {
    "speed" => 50,
    "braking" => 50,
    "time_on_task" => 50
  }
  json = hash.to_json
%>
于 2017-05-12T11:10:48.107 回答
1

我认为您想得太用功了,或者我可能没有完全理解您的问题。

<ul>
  <% json.each do |k,v| %>
      <li><%= "<b>#{k.humanize}</b>: #{v}".html_safe %></li>
  <% end %>
</ul>

附言。使用Enumerable#detect速度比Enumerable#select.first

于 2017-05-12T23:34:01.233 回答