YAML:是否可以在根部分有一个列表?

Jan*_*tke 10 yaml file

是否可以在 YAML 文件的根部分中有一个列表?到目前为止,我还没有看到遵循这种结构的文件,我一直在问自己它是否违反了语法。

下面是一个例子:

- 'entry A'
- 'entry B'
- 'entry C'
Run Code Online (Sandbox Code Playgroud)

到目前为止我所看到的:

list:
  - 'entry A'
  - 'entry B'
  - 'entry C'
Run Code Online (Sandbox Code Playgroud)

换句话说,该list:部分是否已过时?

sel*_*ish 7

可以这样做。
这是一个使用snakeYaml的java示例:

org.yaml.snakeyaml.Yaml yaml = new org.yaml.snakeyaml.Yaml();
Object o = yaml.load("- 'entry A'\n- 'entry B'\n- 'entry C'");
System.out.println(o.getClass().getName());
Run Code Online (Sandbox Code Playgroud)

代码的输出是:

java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)

但在实际场景中,我们将对象内容存储到 yaml 文件中。当我们这样做时,如果一个文件的类型是 List,我们实际上像你总是看到的那样存储:

'field name':
- item1
- item2
Run Code Online (Sandbox Code Playgroud)


Ant*_*hon 6

不,标量list并没有过时,它定义了一个完全不同的结构。

YAML 文件由映射序列标量组成

  • 映射由键值对组成。键可以是标量或列表;值可以是映射或序列或标量。
  • 列表由元素组成,每个元素可以是映射、序列或标量
  • 标量原则上是一个字符串,但某些字符串可以被特殊解释(仅限数字 -> 整数,“假” -> 布尔值等)

在顶层,您可以有一个(单个)标量(诚然这不是很灵活):

Hello world
Run Code Online (Sandbox Code Playgroud)

或映射:

abc: 
  - 1
  - 2
Run Code Online (Sandbox Code Playgroud)

或 aa 列表:

- 1
- 2  
Run Code Online (Sandbox Code Playgroud)

你的第一个例子在顶层有一个由标量组成的序列,你的第二个例子在顶层有一个带有单个键值对的映射。键是标量list,值是标量序列。