2013-10-31 93 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很多好的建議讓我前進。 –