2012-04-11 44 views
2

我的應用程序導入一些csv數據,然後構建一個數組,將其序列化並將其保存在數據庫字段中。我將其保存在串行化的形式,因爲每次輸入該數據具有不同的結構...有時3列,有時10柱等在ruby中,我如何序列化數組並保留每個元素的數字/字符串類型?

[[「水果」,「價格」,「重量」], [ 「Apple」,1.23,4.5], [「Orange」,5.2,3.3]]

導入的數據有引號圍繞字符串,並且數字周圍沒有引號,所以在導入期間,我能夠保留類型每個元素。

但是,當我把它序列化(在數據庫字段保存)與ActiveSupport::JSON.encode(csv_data) 每個元素被保存爲一個字符串

[「果」,「價格」,「重量」], [「蘋果「,」1.23「,」4.5「], [」Orange「,」5.2「,」3.3「]]

所以當我反序列化它時,數值已轉換爲字符串,但我需要它們作爲後處理的數字。

問題是,每個數據導入都是不同的......有時它是所有的數字,有時第一列是字符串,有時2或3列可能是字符串。

我不在乎如果我使用JSON或不 - 我只需要一種方法來編碼和解碼數據,所以我可以將其填充到數據庫字段中,而不會丟失「類型」導致解碼。

我應該使用某種xml方法而不是JSON嗎?

回答

3

Marshal來救援!

tmp = [["fruit", "price", "weight"], ["Apple", 1.23, 4.5], ["Orange", 5.2, 3.3]] 
dmp = Marshal.dump(tmp) 
p Marshal.load(dmp) 
# => [["fruit", "price", "weight"], ["Apple", 1.23, 4.5], ["Orange", 5.2, 3.3]] 
+0

請注意,Marshall格式在Ruby的不同版本(1.9與2.0)和implmentations(MRI與JRuby)之間不兼容。 – Kris 2015-07-29 09:52:39

相關問題