YAML.load引发异常:RangeError:bignum太大而无法转换为`long'

时间:2014-09-24 13:49:11

标签: ruby

我有这个YAML字符串:

---
lease: 2014-09-26 05:20:39.616606000 Z
createtime: 2014-09-20 05:20:39.616606000 Z
leased_at: 2014-09-23 00:22:37.052173269 +08:00

我的ruby版本很旧,但我无法升级它,我的版本是:

ruby 1.9.1p376 (2009-12-07 revision 26041) [i686-linux]

当我尝试使用YAML.load来解析上面的字符串时:

YAML.load(str) # where str is above string

我收到以下错误:

irb(main):028:0> YAML.load(str)
RangeError: bignum too big to convert into `long'
    from /build/toolchain/lin32/ruby-1.9.1-p376/lib/ruby/1.9.1/yaml.rb:133:in `utc'
    from /build/toolchain/lin32/ruby-1.9.1-p376/lib/ruby/1.9.1/yaml.rb:133:in `node_import'
    from /build/toolchain/lin32/ruby-1.9.1-p376/lib/ruby/1.9.1/yaml.rb:133:in `load'
    from /build/toolchain/lin32/ruby-1.9.1-p376/lib/ruby/1.9.1/yaml.rb:133:in `load'
    from (irb):28

我认为问题是那些时间包含太长的毫秒部分。鉴于我无法升级我的ruby,如何成功解析YAML字符串?

1 个答案:

答案 0 :(得分:0)

您可以直接在YAML字符串上使用regexp以匹配您的时间模式并截断毫秒数。

有关红宝石中regexp的更多信息:http://ruby-doc.org/core-2.1.1/Regexp.html