2013-10-31 35 views
2

我的公司在Amazon S3上存储了压缩文件中的数据消息(json)。我想用Ruby来遍历文件并做一些分析。我开始使用“AWS/S3”宝石,并获得获得每个文件作为一个对象:在Ruby中读取S3中的gzip压缩数据

#<AWS::S3::S3Object:0x4xxx4760 '/my.company.archive/data/msg/20131030093336.json.gz'> 

但是,一旦我有这样的对象,我不知道如何将它解压缩,甚至访问内部数据它。

回答

1

您可以在这里看到S3Object的文档:http://amazon.rubyforge.org/doc/classes/AWS/S3/S3Object.html

您可以通过调用your_object.value来获取内容;看看你能得到那么多。那么它应该是一个拆开gzip blob的问题。 Zlib应该能够处理。

我不确定.value是否会返回大量的二进制数据或IO对象。如果是字符串,则可以将其包装在StringIO对象中,以将其传递到Zlib::GzipReader.new,例如,

json_data = Zlib::GzipReader.new(StringIO.new(your_object.value)).read 

S3Objectstream方法,其中我希望就像一个IO对象(我不能测试,在这里,抱歉)。如果是这样,你可以这样做:

json_data = Zlib::GzipReader.new(your_object.stream).read 

一旦你解压缩后的JSON的内容,你可以叫JSON.parse就可以了,例如

JSON.parse Zlib::GzipReader.new(StringIO.new(your_object.value)).read 
+0

谢谢@struthersneil很多好的建议让我前进。 –