2013-04-23 58 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