我如何parsing一个YAML文件?
我想知道如何parsing具有以下内容的YAML文件:
--- javascripts: - fo_global: - lazyload-min - holla-min
目前我正在试图parsing它:
@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
但它似乎并没有工作,并给我一个错误,价值为零。
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
如果我尝试这个,它会放出整个string(fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil? @custom_asset_packages_yml['javascripts'].each{ |js| js['fo_global'] } end
也许我错过了什么,但为什么试图parsing文件? 为什么不加载YAML并检查导致的对象?
如果你的示例YAML在some.yml
,那么这个:
require 'yaml' thing = YAML.load_file('some.yml') puts thing.inspect
给我
{"javascripts"=>[{"fo_global"=>["lazyload-min", "holla-min"]}]}
我有同样的问题,但也想获得文件的内容(在YAML前面的事情之后)。
这是我find的最好的解决scheme:
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/shared/zmkztdzucsgv