如何序列化数组并反序列化

时间:2013-03-17 11:49:16

标签: ruby serialization deserialization

如何序列化数组并从字符串反序列化?我尝试了下面的代码,但它并没有真正返回原始的整数数组,而是为了字符串数组。

 x = [1,2,3].join(',') # maybe this is not the correct way to serialize to string?
 => '1,2,3'

 x = x.split(',')
 => [ '1', '2', '3' ]

有没有办法让它在没有.collect{ |x| x.to_i }的情况下恢复为整数?

2 个答案:

答案 0 :(得分:31)

标准方式是使用Marshal

x = Marshal.dump([1, 2, 3])
#=> "\x04\b[\bi\x06i\ai\b"

Marshal.load(x)
#=> [1, 2, 3]

但你也可以用JSON

来做
require 'json'

x = [1, 2, 3].to_json
#=> "[1,2,3]"

JSON::parse(x)
#=> [1, 2, 3]

YAML

require 'yaml'

x = [1, 2, 3].to_yaml
#=> "---\n- 1\n- 2\n- 3\n"

YAML.load(x)
#=> [1, 2, 3]

答案 1 :(得分:3)

Split只是一个切断字符串的工具 - 它不知道该字符串的来源。

序列化数据的方法有很多:YAML,JSON和Marshal是Ruby标准库中的三个。所有区分字符串,整数等。

每个人都有利弊。例如,从不受信任的源加载Marshal数据是危险的,如果需要使用非Ruby代码交换数据,则Marshal不好。 JSON通常是一个很好的allrounder。