在Rails 2.3.11中打破OrderedHash YAML序列化?

时间:2011-07-28 12:57:02

标签: ruby-on-rails ruby serialization yaml

我有复杂的数据结构,如下所示:OrderedHash,键是日期,值是有序的哈希,它使用字符串键保存整数。我需要序列化那些以便存储在db中。但是在to_yaml / YAML.load数据有时被破坏之后 - 一些二级哈希被第一级替换,反之亦然。但有时它并没有被打破。

yaml表示看起来像这样

  • 2011-07-10:!omap
    • 00:00-01:00:0
    • 01:00-02:00:0
    • 02:00-03:00:0
    • 03:00-04:00:0
    • 04:00-05:00:0
    • 05:00-06:00:0
    • 06:00-07:00:0
    • 07:00-08:00:0
    • * id010
    • 09:00-10:00:0
    • 10:00-11:00:0
    • 11:00-12:00:0
    • 12:00-13:00:0
    • 13:00-14:00:0
    • 14:00-15:00:0
    • 15:00-16:00:0
    • 16:00-17:00:0
    • 17:00-18:00:0
    • 18:00-19:00:0
    • 19:00-20:00:0
    • 20:00-21:00:0
    • 21:00-22:00:0
    • 22:00-23:00:0
    • 23:00-23:59:0

此* id010 /& id010部分随机插入yaml代码的不同位置。我认为这是错误的原因。

有没有人知道yaml序列化有什么问题? ruby 1.8.6,升级到1.9不是一个选项:(

2 个答案:

答案 0 :(得分:0)

很可能有一个错误。我相信YAML引擎Ruby 1.8使用的是Syck,这个代码是由_why多年前创建的。从那时起,代码就没有得到妥善维护。

Ruby 1.9应该使用一个名为Psych的新引擎,但我不确定它与Ruby 1.8的兼容性。

在Github上,我还找到了另一种选择,看起来对你来说可能值得一试:
https://github.com/cesare/ruby-libc-libyaml

Syck (您可能会尝试使用此版本,因为它看起来像是半维护的): https://github.com/indeyets/syck

心理(您也可以尝试看看它是否在1.8上运行):
https://github.com/tenderlove/psych


修改

也许JSON也可以替代你?看看to_json方法,看看它是否可以用于您的目的,并且可能以这种方式绕过YAML问题。

答案 1 :(得分:0)

我的看法是id010在那里,因为你可能有某种递归/自引用结构,这就是处理它的方法。