ruby - 将 YAML 解析为键值并包含 yaml 类别

标签 ruby yaml

希望将 YAML 文件解析为纯键=值字符串。

我有一些初始结构,但我也想从 yaml 中获取一些 key 。

test:
   line1: "line 1 text"
   line2: "line 2 text"
   line3: "line 3 text"
options:
    item1: "item 1 text"
    item2: "item 2 text"
    item3: "item 3 text"

ruby :

File.open("test.yml") do |f|  
  f.each_line do |line|
    line.chomp

    if line =~ /:/
        line.chop
        line.sub!('"', "")
        line.sub!(": ", "=")
        line.gsub!(/\A"|"\Z/, '')
        printline = line.strip
        puts "#{printline}"
        target.write( "#{printline}")
    end
  end
end

目前的结果是这样的

test:
line1=line 1 text
line2=line 2 text
line3=line 4 text
options:
item1=item 1 text
item2=item 2 text
item3=item 3 text

但我希望在之前添加类别:

test/line1=line 1 text
test/line2=line 2 text
test/line3=line 3 text
options/item1=item 1 text
options/item2=item 2 text
options/item3=item 3 text

为每一行添加类别的最佳方式是什么?

最佳答案

您可以使用 YAML#load_file,读取每一行并根据您的需要进行调整:

foo = YAML.load_file('file.yaml').map do |key, value|
  value.map { |k, v| "#{key}/#{k}=#{v}" }
end
foo.each { |value| puts value }

# test/line1=line 1 text
# test/line2=line 2 text
# test/line3=line 3 text
# options/item1=item 1 text
# options/item2=item 2 text
# options/item3=item 3 text

关于ruby - 将 YAML 解析为键值并包含 yaml 类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50225116/

相关文章:

ruby - 为什么我们定义 `#initialize` 而不是 `::new`

ruby-on-rails - Rails 4.1.2 - to_param 转义斜杠(并破坏应用程序)

ruby-on-rails - 在生产中禁用 GraphQL 自省(introspection)请求

ruby-on-rails - 列出带有完整键的 Rails I18n 字符串

javascript - 如何在node.js的帮助下制作config.yaml并写入它?

docker - 将 args 传递给容器时 Kubernetes pod/部署?

azure - 如何从另一个存储库调用二头肌文件?

ruby-on-rails - Searchkick:Elasticsearch 没有索引 "FORBIDDEN/12/index read-only"?

Ruby 单例 attr_accessor

php - yaml/symfony2 : Override configurations