生成一个json文件 - 我对语法很困惑

时间:2013-04-23 03:19:57

标签: ruby-on-rails ruby json

我有一个我用Nokogiri创建的哈希,我正在尝试从中生成一个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

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

错误非常明显:"No such file or directory - public/temp.json"

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

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