YAML 多行字符串:键与数组值

YAML multi-line strings: keys vs array values

这很具体,但让我很困惑。我们在解析时几乎相同地对待嵌套键 + 常规数组——有时会在需要时添加额外信息,如下所示:

---
Entry 1:
    - lorem:
        true
    - ipsum
    - dolor
Entry 2:
    - lorem
    - ipsum:
        true
    - dolor
...

... 这给了我这个 JSON:

{
  "Entry 2": [
    "lorem", 
    {
      "ipsum": true
    }, 
    "dolor"
  ], 
  "Entry 1": [
    {
      "lorem": true
    }, 
    "ipsum", 
    "dolor"
  ]
}

一切都很好。为内容输入多行字符串会变得更乱,但仍然可以像这样正常工作(将它们粘贴到 Online YAML Parser 或其他一些编译器以供参考):

---
#works:

Test:
  - lorem
  - ipsum
  - dolor
? |-
    multiline
    Test
:
  - lorem
  - ipsum:
      true
  - dolor
...

更深入,我的二级数组中的多行字符串也能正常工作,正如规范所预期的那样:

---
#works:
Test:
    - |-
        multiline
        lorem
    - ipsum
    - dolor
? |-
    multiline
    Test
:
    - lorem
    - ipsum:
        true
    - dolor
...

哇哦!但是一旦我 mix 多行键和多行数组字符串在同一级别,我的设置就会中断:

---
#breaks:
Test:
    - |-
        multiline
        lorem
    ? |- 
        multiline
        ipsum
    : 
        true
? |-
    multiline
    Test
:
    - lorem
    - ipsum:
        true
    - dolor
...

如何解决?

如果您在同一级别混合使用键和数组项,YAML 会中断。你不需要多行字符串:

- 1
? 2
: 3

这应该解析成什么?数组?映射?然而,这有效:

- 1
- ? 2
  : 3

因此您可以像这样修复 YAML:

---
Test:
    - |-
        multiline
        lorem
    - ? |- 
          multiline
          ipsum
      : 
        true
? |-
    multiline
    Test
:
    - lorem
    - ipsum:
        true
    - dolor
...