2010-08-14 13 views
26

मुझे हैश में एक yaml फ़ाइल लोड करने की आवश्यकता है,
मुझे क्या करना चाहिए?रूबी हैश और/या सरणी में एक yaml फ़ाइल को कैसे पार्स करें?

+2

कृपया अपने चयनित जवाब अद्यतन करें। जिसे आपने चुना है, वह आपके वास्तविक प्रश्न का उत्तर नहीं देता है (भले ही यह अधिक जानकारीपूर्ण है या नहीं) – Volte

उत्तर

11

YAML मॉड्यूल का उपयोग करें:
http://ruby-doc.org/stdlib-1.9.3/libdoc/yaml/rdoc/YAML.html

node = YAML::parse(<<EOY) 
one: 1 
two: 2 
EOY 

puts node.type_id 
# prints: 'map' 

p node.value['one'] 
# prints key and value nodes: 
# [ #<YAML::YamlNode:0x8220278 @type_id="str", @value="one", @kind="scalar">, 
#  #<YAML::YamlNode:0x821fcd8 @type_id="int", @value="1", @kind="scalar"> ]' 

# Mappings can also be accessed for just the value by accessing as a Hash directly 
p node['one'] 
# prints: #<YAML::YamlNode:0x821fcd8 @type_id="int", @value="1", @kind="scalar"> 

http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm

+7

यह सिक :: मानचित्र (या समान ऑब्जेक्ट्स) को वापस करने के लिए है, न कि हैश। इसे नियमित रूप से रूबी हैश (या परिवर्तित) करने का कोई तरीका है? – elsurudo

85

मैं की तरह कुछ का प्रयोग करेंगे:

hash = YAML.load(File.read("file_path")) 
+0

रूबी 2.2 प्रतीकों में भी जीसीएड हैं। – Kris

+0

[मेरा उत्तर] (https://stackoverflow.com/a/45068104/3042952) इस पर आधारित है, सिवाय इसके कि यह इसे आसान बनाता है और इसके बजाय YAML.load_file का उपयोग कर एक और अधिक पठनीय बनाता है। –

2

आप this related question, अर्थात् में उल्लेख किया है एक समस्या में पड़ सकता है, कि वाईएएमएल फ़ाइल या स्ट्रीम उस ऑब्जेक्ट को निर्दिष्ट करती है जिसमें वाईएएमएल लोडर का प्रयास किया जाएगा डेटा को रूपांतरित करें। समस्या यह है कि आपको संबंधित जेम की आवश्यकता होगी जो प्रश्न में वस्तु के बारे में जानता है।

मेरा समाधान काफी छोटा था और उस प्रश्न का उत्तर के रूप में प्रदान किया जाता है। ऐसा करें:

yamltext = File.read("somefile","r") 
yamltext.sub!(/^--- \!.*$/,'---') 
hash = YAML.load(yamltext) 

संक्षेप में, आप ऑब्जेक्ट-क्लासिफायर टेक्स्ट को yaml-text से स्ट्रिप करते हैं। फिर आप इसे पार्स/लोड करते हैं।

6

Venables 'जवाब का एक सरल संस्करण:

hash = YAML.load_file("file_path") 
संबंधित मुद्दे