首页 > 解决方案 > YAML 中的这个数据结构是什么?

问题描述

我试图使最干净的 YAML 数据结构成为可能(干净是指最少的无关标记)。

我要创建的是一个列表sections,其中每个section本身就是一个不同类型对象的列表。

在 JSON 中,这看起来像

{
"sections": [
  [
     {"p": "Words"}
  ],
  [
    {
     "ul": "more words",
     "p": "other"
    } 
  ]
 ]
}

到目前为止,这就是我在 YAML 中的内容:

sections:
  -
    - p: 'Test words.'

    - ul:
      - "Words"
      - "More words"

  -
    - p: "Other words"

我对破折号感到困惑。

在上面的示例中,两者都p需要ul破折号(作为名称对象的一部分)还是只需要第一个破折号?

即这在功能上是一样的吗?

sections:
  -
    - p: 'Test words.'
     ul:
      - "Words"
      - "More words"

此外,后面没有内容的破折号(如部分下的第一个破折号)表示什么?

sections:
  - // this dash
    - p: 'Test words.'

标签: yaml

解决方案


您的 JSON 示例:

{
"sections": [
  [
     {"p": "Words"}
  ],
  [
    {
     "ul": "more words",
     "p": "other"
    } 
  ]
 ]
}

在 YAML 中可以这样写:

---
sections:
- - p: Words
- - p: other
    ul: more words

有两个连字符(破折号),因为它是一个嵌套序列(又名列表、数组)。

在 YAML 中,每个序列项都以连字符开头。

JSON 示例也是有效的 YAML,因为 JSON 是 YAML 的子集。YAML 是作为 XML 的替代品而发明的,大约与 JSON 是独立发明的同时。当 YAML 的发明者意识到 JSON 时,他们在 1.2 版本中修改了语法以兼容它,但它已经支持类似于 JSON 的紧凑样式。

例子也可以这样写:

---
sections:
- [
   {p: Words}
  ]
- [
    {
      ul: more words,
      p: other,
    } 
  ]

更多关于嵌套序列和映射


推荐阅读