如何序列化数组并从字符串反序列化?我尝试了下面的代码,但它并没有真正返回原始的整数数组,而是为了字符串数组。
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 }
的情况下恢复为整数?
答案 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。