【问题标题】:File.open and YAML.load_file displaying different content for same fileFile.open 和 YAML.load_file 显示同一文件的不同内容
【发布时间】:2014-04-26 18:33:14
【问题描述】:

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

文件是bank.yml

production:
  account_number: 574827192
  routing_number: 048372651

旁注:我更改了以下文件中的数字,以免泄露任何实际的私人数据。

UPDATE => 我意识到主要问题是前导零的结果。 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"

【问题讨论】:

  • 您没有向我们展示 actual 文本文件中的内容 - 哪个是正确的?
  • 啊@Uri Agassi,我已更新以包含该信息
  • 这是无效的YAML,你可以在这里查看:yamltojson.com
  • 忘记了冒号。现在是正确的。对不起,我没有直接复制,因为它是银行数据
  • 如果数字以0 开头并且只包含字符

标签: ruby-on-rails ruby yaml


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 好的,但是我需要做些什么来确保我在文件中输入的数字是我想要的实际值?不知道你是否看到我的问题..
    • 不应该发生的事情,原始文件中的内容,确保其中没有特殊字符。
    • 在我的本地 mac 系统中运行良好,运行良好。
    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多