Chciałbym wiedzieć, jak analizować plik YAML z następującą zawartością:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
Obecnie próbuję to przeanalizować 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ść wynosi zero.
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, wypisze cały ciąg (fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
Odpowiedzi:
Może czegoś mi brakuje, ale po co próbować parsować plik? Dlaczego nie załadować YAML i zbadać obiekty, które wynikają?
Jeśli masz próbkę YAML
some.yml
, to:daje mi
źródło
YAML.load
pobiera ciąg YAML,YAML.load_file
pobiera względną ścieżkę pliku.Miałem ten sam problem, ale chciałem też uzyskać zawartość pliku (po froncie YAML).
To najlepsze rozwiązanie, jakie znalazłem:
Źródło i dyskusja: https://practicingruby.com/articles/tricks-for-working-with-text-and-files
źródło
Oto jeden linijka, której używam z terminala do testowania zawartości plików yml:
źródło