반응형
루비에서 YAML 파일을 구문 분석하려면 어떻게 해야 합니까?
다음과 같은 내용의 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
하지만 작동하지 않는 것 같고 값이 0이라는 오류가 발생합니다.
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_globalazyload-minholla-min)이 출력됩니다.
if !@custom_asset_packages_yml.nil?
@custom_asset_packages_yml['javascripts'].each{ |js|
js['fo_global']
}
end
제가 뭔가를 놓쳤을 수도 있지만, 왜 파일을 구문 분석하려고 합니까?YAML을 로드하고 결과물을 검사하는 것이 어떻습니까?
샘플 YAML이 다음에 있는 경우some.yml
그러면 다음과 같습니다.
require 'yaml'
thing = YAML.load_file('some.yml')
puts thing.inspect
나에게 주는
{"javascripts"=>[{"fo_global"=>["lazyload-min", "holla-min"]}]}
저도 같은 문제가 있었지만 (YAML 프런트 이후) 파일의 내용을 받고 싶었습니다.
이것이 제가 찾은 최고의 솔루션입니다.
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
터미널에서 yml 파일의 내용을 테스트하는 데 사용하는 라이너는 다음과 같습니다.
$ 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"}}}}}
언급URL : https://stackoverflow.com/questions/3877004/how-do-i-parse-a-yaml-file-in-ruby
반응형
'programing' 카테고리의 다른 글
애플리케이션 대 세션 대 캐시 (0) | 2023.07.09 |
---|---|
OpenXML C#을 사용하여 Excel에서 셀의 열 인덱스 가져오기 (0) | 2023.07.09 |
컴파일러가 프로그램의 시간 복잡성을 저하시키는 것이 합법입니까?이것이 관찰 가능한 행동으로 간주됩니까? (0) | 2023.07.09 |
데이터 프레임 열을 숫자 형식으로 변환하는 방법은 무엇입니까? (0) | 2023.07.09 |
React + TypeScript 오류:이 호출과 일치하는 오버로드가 없습니다. (0) | 2023.07.09 |