0

我正在尝试执行以下操作:

  • 打开并读取包含多个 yaml 文档的文件
  • 将 yaml 文档解析为 ruby​​ 对象
  • 打印每个 ruby​​ 对象的内容

和代码:

yml_string = Psych.dump(File.read(infile))
Psych.load_stream(yml_string) .each do |mobj|
  puts "mobj:\n #{mobj}"
end

puts 打印 yml_string(多个 yaml 文档)的内容,但它是一个长字符串。如何从 yml_string 解析每个 yaml 文档并将它们存储到 ruby​​ 对象中?

infile 的内容(基于OP的评论):

---
member:
    country: AF
    phone1: 60 223-4564
    phone2: +93 799 123-456

---
member:
    country: BR
    phone1: +55 55 2000 3456
    phone2: 55 9000 1234

---
member:
    country: CA
    phone1: 604 423-4567
    phone2: +1 604 423-4567
4

2 回答 2

1

这就是我最终得到的

yaml_hash = Psych.load_stream(File.read(infile))
yaml_hash.each do |member|
  mem = Hash[member['member']]
end

谢谢你的帮助。

于 2014-03-21T16:16:34.180 回答
0
require 'yaml'
require 'pp'

infile = "test.yml"

pp YAML.load_stream(File.read(infile))
# [{"member"=>
#    {"country"=>"AF", "phone1"=>"60 223-4564", "phone2"=>"+93 799 123-456"}},
#  {"member"=>
#    {"country"=>"BR", "phone1"=>"+55 55 2000 3456", "phone2"=>"55 9000 1234"}},
#  {"member"=>
#    {"country"=>"CA", "phone1"=>"604 423-4567", "phone2"=>"+1 604 423-4567"}}]

在最近的 MRI 上,psych 与 yaml lib 相同

p [RUBY_VERSION, YAML == Psych]
["2.0.0", true]
p [RUBY_VERSION, YAML == Psych]
["1.9.3", true]
于 2014-03-17T14:00:04.557 回答