File.open和YAML.load_file显示同一文件的不同内容

时间:2014-04-26 18:33:15

标签: ruby-on-rails ruby yaml

这真的很奇怪。当我从YAML.load_file加载YML文件并且File.open显示相同的文本但数字不同时。这是编码问题还是什么?我以前从未见过这个。

该文件是bank.yml

production:
  account_number: 574827192
  routing_number: 048372651

旁注:我更改了以下文件中的数字,以便不显示任何实际的私人数据。

更新 =>我意识到主要问题是前导零的结果。您不能在YAML文件中具有前导零,或者它将变为八进制。试图弄清楚如何构造YAML文件以包含前导零。

> irb(main):027:0> YAML.load_file("#{Rails.root}/../../bank.yml")
> => {"production"=>{"account_number"=>574827192, "routing_number"=>847365987}}

> irb(main):028:0> File.open("#{Rails.root}/../../bank.yml").read
> => "production:\n  account_number: 574827192\n  routing_number: 048372651\n"

2 个答案:

答案 0 :(得分:2)

如果用引号将YAML文件中的值包装起来,它们将被视为字符串而不是删除前导零或将其解析为八进制:

production:
  account_number: '574827192'
  routing_number: '048372651'

答案 1 :(得分:1)

是的,当您执行YAML.load_file时,它实际上会解码YAML结构并为您提供很好的hash,您可以随时使用。

但是,当您执行File.open("file.yaml").read时,您正在阅读其原始格式的文件,您必须进一步解码它,将其用作hash或其他一些数据结构。