【问题标题】:YAML multi-line strings: keys vs array valuesYAML 多行字符串:键与数组值
【发布时间】:2016-10-22 00:56:39
【问题描述】:

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

---
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
...

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

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

如何解决?

【问题讨论】:

    标签: arrays json string yaml multilinestring


    【解决方案1】:

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

    - 1
    ? 2
    : 3
    

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

    - 1
    - ? 2
      : 3
    

    所以你可以像这样修复你的 YAML:

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

    【讨论】:

    • 非常感谢您在这件事上对我进行教育!
    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2018-03-06
    • 2019-05-13
    相关资源
    最近更新 更多