在ruby中,如何序列化数组并保留每个元素的数字/字符串类型?

时间:2012-04-11 07:53:03

标签: ruby serialization

我的应用程序导入一些csv数据,我构建一个数组,序列化它,并将其保存在数据库字段中。我将其保存为序列化形式,因为每次导入的数据都有不同的结构...有时是3列,有时是10列等。

[[“水果”,“价格”,“重量”], [“Apple”,1.23,4.5], [“橙色”,5.2,3.3]]

导入的数据在字符串周围有引号,没有数字引号,因此在导入过程中我可以保留每个元素的类型。

但当我使用ActiveSupport::JSON.encode(csv_data)对其进行序列化(以保存在数据库字段中)时 每个元素都保存为字符串

[[“水果”,“价格”,“重量”], [“Apple”,“1.23”,“4.5”], [“橙色”,“5.2”,“3.3”]]

因此,当我对其进行反序列化时,数值已转换为字符串,但我需要将它们作为数字进行后处理。

问题是,每个数据导入都是不同的...有时它;所有数字,有时第一列是字符串,有时2或3列可能是字符串。

我不关心我是否使用JSON - 我只需要一种方法来对数据进行编码和解码,这样我就可以将其填充到数据库字段中,而不会丢失'type'来解码。

我应该使用某种xml方法而不是JSON吗?

1 个答案:

答案 0 :(得分: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]]