2013-04-23 31 views
0

我有一个散列,我用Nokogiri创建了一个散列,并且我试图生成一个JSON文件。我发现生成json文件 - 我对语法感到困惑

tempHash = { 
    "key_a" => "val_a", 
    "key_b" => "val_b" 
} 
File.open("public/temp.json","w") do |f| 
    f.write(tempHash.to_json) 
end 

问题是我不断收到错误

test.rb:43:in `initialize': No such file or directory - public/temp.json (Errno::ENOENT) 

我的代码看起来像

def summary 
    listing_data = @nodes 
    listings = listing_data.css('div.unsponsored div.item.compact.listing') 

    listing_hashes = listings.map do |x| 
    type = "#{@type}" 
    address = x.css('div.body h3 a').text 
    unit = x.css('div.body h3 a').text.gsub!(/.*?(?=#)/im, "") 
    url = x.css('div.item_inner div.body h3 a').text 
    price = x.css('h3 span').text 

    { 
     :type => type, 
     :address => address, 
     :unit => unit, 
     :url => url, 
     :price => price, 
    } 
    end 

    File.open("public/temp.json","w") do |f| 
    f.write(JSON.pretty_generate(listing_hashes)) 
    end 
end 

谢谢!

+0

这不是关于引入nokogiri。我删除了标签。 – 2013-04-23 06:06:47

回答

1

您可能没有创建文件夹。 File.open与选项w将创建一个文件,如果它不存在,但它不能创建丢失的目录。

您可以使用此代码创建文件夹,如果你不能手动创建它

Dir.mkdir('public') unless File.exists?('public') 
File.open("public/temp.json","w") do |f| 
f.write(JSON.pretty_generate(listing_hashes)) 
end 
+0

谢谢!我得到它来生成一个JSON文件,但它似乎只生成10个条目,因为它应该生成40.任何我应该看看的感觉? – DynastySS 2013-04-23 03:50:08

+0

我不知道。但是你可能想要确保“列表”有40个条目,就像你期待的那样。你也可能会覆盖你的文件。如果您多次运行该方法,则只会获得最新的json输出。 – 2013-04-23 03:57:40

0

的错误是不言自明:"No such file or directory - public/temp.json"

在这种情况下,它可能不存在的目录,因为你的模式参数指定'w'。如果文件不存在,指定'w'将创建该文件,但不会创建该目录。

尝试自己创建public目录,然后再次运行您的代码。

+0

甚至更​​好,前置Rails.root公开 – 2013-04-23 03:34:21

+0

啊,我明白了。我很困惑,因为我刚运行的桌面上有一个独立的文件。我觉得它是从我的电脑上取得公用文件夹。然后我记得应用程序中有一个公共文件夹,所以我将它放在那里,运行它,然后运行。欣赏它! – DynastySS 2013-04-23 03:36:58