我正在尝试从网站抓取数据以构建有关产品功能的数据集,其中每行都是产品,每列都是一个功能。我的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和基于文档的权衡是什么?
谢谢。
答案 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。