有关使用更改字段存储已删除数据的建议

时间:2015-11-14 22:36:27

标签: ruby json sqlite csv web-scraping

我正在尝试从网站抓取数据以构建有关产品功能的数据集,其中每行都是产品,每列都是一个功能。我的scraper返回以下JSON数据:

{
  "data": [{
    "id": "001",
    "price": "$12",
    "color": "blue"
  }, {
    "id": "002",
    "price": "$13",
    "color": "red"
  }]
}

过去,我能够轻松地将这些类型的数据存储在CSV中(hash =上面的JSON数据):

CSV.open("data.csv","w") do |c|
    c << hash["data"][0].keys
end
hash["data"].each do |d|
    CSV.open("data.csv","a+") do |c|
        c << d.values
    end
end

但JSON数据中的字段不是常量:

{
  "data": [{
    "id": "001",
    "price": "$12",
    "color": "blue"
  }, {
    "id": "002",
    "price": "$13",
    "discount": "0.05",
    "color": "red"
  }]
}

我的CSV代码不再适用于这些数据。 discount字段中显示color,实际的color字段向右移动一列。

存储哈希数组的最佳方法是什么?更一般地说,CSV与基于SQL和基于文档的权衡是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为使用CSV文件没有任何好处。

我会使用MongoDB,特别是Mongoid。或者您可以使用Postgres和JSON字段。以下是使用Mongoid的方法:

scraping = {
  "data": [{
    "id": "001",
    "price": "$12",
    "color": "blue"
  }, {
    "id": "002",
    "price": "$13",
    "color": "red"
  }]
}

Item.create( data:scraping )

item.rb的:

class Item
  include Mongoid::Document

  field :data, type:Hash

数据将被序列化为BSON,因此任何深度的有效JSON都可以工作。

但是,请务必阅读legal key names for mongoDB

Reference