Я хотел бы знать, как проанализировать файл YAML со следующим содержанием:
---
javascripts:
- fo_global:
- lazyload-min
- holla-min
В настоящее время я пытаюсь разобрать это так:
@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
Если я попробую это, он выдаст всю строку (fo_globallazyload-minholla-min):
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
Ответы:
Может я что-то упустил, но зачем пытаться разобрать файл? Почему бы просто не загрузить YAML и изучить объект (ы), который в результате?
Если ваш образец YAML находится в
some.yml
, то это:дает мне
источник
YAML.load
принимает строку YAML,YAML.load_file
принимает относительный путь к файлу.У меня была та же проблема, но я также хотел получить содержимое файла (после фронтальной версии YAML).
Это лучшее решение, которое я нашел:
Источник и обсуждение: https://practicingruby.com/articles/tricks-for-working-with-text-and-files
источник
Вот один вкладыш, который я использую с терминала, чтобы проверить содержимое файла (ов) yml:
источник