首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby中解析YAML文件?

如何在Ruby中解析YAML文件?
EN

Stack Overflow用户
提问于 2010-10-07 05:21:52
回答 3查看 235.6K关注 0票数 228

我想知道如何解析包含以下内容的YAML文件:

代码语言:javascript
复制
--- 
javascripts: 
- fo_global:
  - lazyload-min
  - holla-min

目前我正在尝试这样解析它:

代码语言:javascript
复制
@custom_asset_packages_yml = (File.exists?("#{RAILS_ROOT}/config/asset_packages.yml") ? YAML.load_file("#{RAILS_ROOT}/config/asset_packages.yml") : nil)
    if !@custom_asset_packages_yml.nil?
      @custom_asset_packages_yml['javascripts'].each{ |js|
        js['fo_global'].each{ |script|
         script
        }
      }
    end

但它似乎不起作用,并给我一个错误,即值为零。

代码语言:javascript
复制
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

如果我尝试这样做,它会输出整个字符串(fo_globallazyload-minholla-min):

代码语言:javascript
复制
if !@custom_asset_packages_yml.nil?
          @custom_asset_packages_yml['javascripts'].each{ |js|
            js['fo_global']
          }
        end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-07 06:21:59

也许我遗漏了什么,但为什么要尝试解析文件呢?为什么不加载YAML并检查结果对象呢?

如果您的示例YAML是some.yml格式的,则如下所示:

代码语言:javascript
复制
require 'yaml'
thing = YAML.load_file('some.yml')
puts thing.inspect

给了我

代码语言:javascript
复制
{"javascripts"=>[{"fo_global"=>["lazyload-min", "holla-min"]}]}
票数 484
EN

Stack Overflow用户

发布于 2013-01-09 18:19:19

我也有同样的问题,但我也想要获取文件的内容(在YAML前面的内容之后)。

这是我找到的最好的解决方案:

代码语言:javascript
复制
if (md = contents.match(/^(?<metadata>---\s*\n.*?\n?)^(---\s*$\n?)/m))
  self.contents = md.post_match
  self.metadata = YAML.load(md[:metadata])
end

来源和讨论:https://practicingruby.com/articles/tricks-for-working-with-text-and-files

票数 13
EN

Stack Overflow用户

发布于 2019-02-25 02:25:58

下面是我在终端中使用的一行代码,用于测试yml文件的内容:

代码语言:javascript
复制
$ ruby  -r yaml -r pp  -e 'pp YAML.load_file("/Users/za/project/application.yml")'
{"logging"=>
  {"path"=>"/var/logs/",
   "file"=>"TacoCloud.log",
   "level"=>
    {"root"=>"WARN", "org"=>{"springframework"=>{"security"=>"DEBUG"}}}}}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3877004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档