Jak przetworzyć plik YAML?
Chciałbym wiedzieć, jak parsować plik YAML o następującej zawartości:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
Obecnie próbuję to przetworzyć w ten sposób:
@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
Ale to nie wydaje się działać i daje mi błąd, że wartość jest zerowa.
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
Jeśli spróbuję tego, to wystawi cały łańcuch (fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
175
Author: the Tin Man, 2010-10-07
2 answers
Może coś mi umyka, ale po co analizować plik? Dlaczego po prostu nie załadować YAML i sprawdzić obiekt(y) tego wyniku?
Jeśli Twoja próbka jest w some.yml
, to:
require 'yaml'
thing = YAML.load_file('some.yml')
puts thing.inspect
Daje mi
{"javascripts"=>[{"fo_global"=>["lazyload-min", "holla-min"]}]}
402
Author: Mike Woodhouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-07 05:32:16
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-07 05:32:16
Miałem ten sam problem, ale również chciałem uzyskać zawartość pliku (po YAML front-matter).
To jest najlepsze rozwiązanie jakie znalazłem:
if (md = contents.match(/^(?<metadata>---\s*\n.*?\n?)^(---\s*$\n?)/m))
self.contents = md.post_match
self.metadata = YAML.load(md[:metadata])
end
Źródło i dyskusja: https://practicingruby.com/articles/tricks-for-working-with-text-and-files
10
Author: sarfata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 09:48:54
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 09:48:54