【问题标题】:Why can't I parse YAML with Ruby?为什么我不能用 Ruby 解析 YAML?
【发布时间】:2014-12-19 20:44:59
【问题描述】:

这是我的 Ruby 代码:

require 'yaml'
yaml = YAML.parse(
  '''
  foo: "hello, world"
  '''
)
puts yaml['foo']

我明白了:

NoMethodError: undefined method `[]' for #<Psych::Nodes::Document:0x007f92a4404d98>

这是 Ruby 2.1.3

【问题讨论】:

  • 如果您从文件中加载 YAML,请查看 YAML.load_file。通常我们不会将 YAML 嵌入到脚本中,而是从远程主机加载它,在这种情况下 load 是合适的,或者从文件中加载,使 load_file 更方便。

标签: ruby yaml


【解决方案1】:

您应该使用 YAML.load 而不是 YAML.parse according to documentation 来解析 YAML。

require 'yaml'
yaml = YAML.load(
  '''
  foo: "hello, world"
  '''
)
puts yaml['foo']

# => hello, world

【讨论】:

  • RubyMine 抱怨.. 我认为 load() 需要一个文件名,不是吗?
  • @BarbaraKrein in documentation 它是提供的字符串,而不是文件名。我刚刚在控制台中使用 ruby​​ 2.1.0 执行了此操作,它没有显示任何警告。
【解决方案2】:

是什么让您认为您无法解析 YAML?错误消息说Psych::Nodes::Document 没有[] 方法,这是真的,但是您返回一个Psych::Nodes::Document 对象而不是异常这一事实意味着解析确实工作了。

您可以在Psych documentation for Psych::Nodes 中阅读更多关于 Psych 的 YAML AST 是如何设计的以及它是如何工作的。

【讨论】:

  • 好点。要访问foo,请使用yaml.to_ruby['foo'] 而不是puts yaml['foo']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2012-10-02
  • 2011-06-11
  • 2010-09-19
  • 2011-03-28
  • 2013-08-27
相关资源
最近更新 更多