10

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

 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 }

4

2 回答 2

32

标准方法是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]
于 2013-03-17T11:51:37.690 回答
3

Split 只是一个切分字符串的工具——它不知道那个字符串是从哪里来的。

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

每个都有优点和缺点。例如,从不受信任的来源加载 Marshal 数据是危险的,如果您需要与非 Ruby 代码交换数据,Marshal 就不好。JSON 通常是一个很好的多面手。

于 2013-03-17T11:55:22.367 回答