2

私のアプリはいくつかのcsvデータをインポートし、配列を作成してシリアル化し、データベースフィールドに保存します。毎回インポートされるデータの構造が異なるため、シリアル化形式で保存します。3列の場合もあれば、10列の場合もあります。

[["fruit"、 "price"、 "weight"]、["Apple"、1.23、4.5]、["Orange"、5.2、3.3]]

インポートされたデータには文字列を引用符で囲み、数値を引用符で囲んでいないため、インポート中に各要素のタイプを保持できます。

しかし、(データベースフィールドに保存するために)シリアル化すると、ActiveSupport::JSON.encode(csv_data) 各要素が文字列として保存されます

[["fruit"、 "price"、 "weight"]、["Apple"、 "1.23"、 "4.5"]、["Orange"、 "5.2"、 "3.3"]]

そのため、逆シリアル化すると、数値は文字列に変換されますが、後処理のために数値として必要になります。

問題は、各データのインポートが異なることです...すべて数値である場合もあれば、最初の列が文字列である場合もあり、2列または3列が文字列である場合もあります。

JSONを使用するかどうかは関係ありません。データをエンコードしてデコードする方法が必要なだけなので、デコード中に「タイプ」を失うことなく、データをデータベースフィールドに詰め込むことができます。

JSONの代わりにある種のxmlメソッドを使用する必要がありますか?

4

1 に答える 1

3

救助のための元帥!

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]]
于 2012-04-11T08:34:12.900 に答える