JSON不会显示

时间:2013-04-21 11:07:17

标签: ruby json html5 web sinatra

我有一个Sinatra应用程序应该从JSON文件中获取图像URL并将它们放入HTML <img>标记。

当我将JSON打印到命令行时,我可以很好地解析JSON,但是当我使用ERB放置数据时,它不会显示。

我把它放在<ul>标签中,只获得了JSON文件中每个图像的项目符号。

这是我的代码:

app.rb:

get "/" do

    file = open("./images.json")
    json = file.read

    @parsed = JSON.parse(json)

    erb :roar

    #@parsed.each do |roar|
    #  p roar["url"]
    #end

end

Roar.erb:

<ul>
 <% @parsed.each do |shop| %>
 <li> <%shop["url"] %> </li>

 <% end %>
</ul>

2 个答案:

答案 0 :(得分:1)

你不只是在这里错过了一个“=”:

<li> <%= shop["url"] %> </li>

答案 1 :(得分:1)

对代码的一般评论:

不要使用:

file = open("./images.json")
json = file.read

@parsed = JSON.parse(json)

相反,请使用:

json = File.open("./images.json") do |fi|
  fi.read
end

@parsed = JSON.parse(json)

或者:

json = File.open("./images.json") { |fi| fi.read }
@parsed = JSON.parse(json)

或者:

json = File.read("./images.json")
@parsed = JSON.parse(json)

或者:

@parsed = JSON.parse(File.read("./images.json"))

原因是:

  • file = open("./images.json")打开文件,但从不关闭它。这不是好形式,也不是惯用的Ruby。前两个替换项会自动关闭打开的文件。
  • 使用File.read返回文件的内容,就像打开它并在单独的步骤中阅读一样,只有一步完成。该文件也会在之后自动关闭。