将数据从YAML加载到数组中

awo*_*ojo 0 ruby yaml

我有这样的数据集:

5.3.12.0
5.3.12.1
5.3.12.2
5.3.12.3 
5.3.12.4
Run Code Online (Sandbox Code Playgroud)

如何在YAML文件中构建它,然后将其作为简单数组加载到Ruby中?

我希望上面的数据作为数组加载,如:

fileset_levels = ["5.3.12.0", "5.3.12.1", "5.3.12.2", "5.3.12.3", "5.3.12.4"]
Run Code Online (Sandbox Code Playgroud)

我将要加载多个这些数组,所以我想要调用文件:

vuln1.yml
vuln2.yml
Run Code Online (Sandbox Code Playgroud)

并将它们全部加载为我可以在我的Ruby脚本中使用的数组.

我试过了:

vuln1_array = yaml::load("vuln1.yml")
Run Code Online (Sandbox Code Playgroud)

但它不会创建数组.

the*_*Man 6

学习如何使用序列化程序执行任何操作的好方法是尝试编写一段代码来演示往返:

require 'yaml'

puts %w[
  5.3.12.0
  5.3.12.1
  5.3.12.2
  5.3.12.3 
  5.3.12.4
].to_yaml
Run Code Online (Sandbox Code Playgroud)

哪个输出:

---
- 5.3.12.0
- 5.3.12.1
- 5.3.12.2
- 5.3.12.3
- 5.3.12.4
Run Code Online (Sandbox Code Playgroud)

创建往返看起来像:

require 'pp'
require 'yaml'

pp YAML.load(
  %w[
    5.3.12.0
    5.3.12.1
    5.3.12.2
    5.3.12.3 
    5.3.12.4
  ].to_yaml
)
Run Code Online (Sandbox Code Playgroud)

现在输出:

=> ["5.3.12.0", "5.3.12.1", "5.3.12.2", "5.3.12.3", "5.3.12.4"]
Run Code Online (Sandbox Code Playgroud)

这个过程的优点是你可以看到它应该是什么样子,并学习如何解析它.

我使用类似的过程来生成用于配置文件的复杂YAML文档.虽然我们可以从头开始创建它们,但使用简单的Ruby数组和散列更容易,然后让YAML在生成输出时对其进行排序.我将输出重定向到一个文件,并将其作为起点.