【问题标题】:How does YAML Interpret Special CharactersYAML 如何解释特殊字符
【发布时间】:2016-08-29 04:17:13
【问题描述】:

所以,我正在尝试在 YAML 中编写插件配置文件,但我的解析器会抛出错误,即使所有 似乎 的格式都正确。 YAML 网站帮助不大,我发现任何类型的教程的唯一地方是 docs.ansible.com/ansible/YAMLSyntax.html 上的参差不齐的那个。由于普遍缺乏 YAML 语法知识,我可能在语法中遗漏了一些愚蠢的东西,每个 YAML 特殊字符有什么作用?

作为参考,这是我行为不端的 YAML 文件:

EnforcedWorlds:|
  - World
  - Nether
  - DIM-1
  - End
  - DIM1
Ignore List:|
  - CuckooClock5000
  - Venomous Potato
  - Subtle Snail
Radius: 10
DisallowInRadius:|
  - Sandstone => "Darude Sandstone!"
  - Quarry (1040) => "This block is too L33T 4U 2 Use here :)"
  - Minium Stone (20102 with datavalues 1 to 1520) => "Minimum Minium area!"
Command Output groups:
  Mod:|
    - Perm Node: gpu.mod
    - (Light Green) $(Banner)
    - (Teal) Command A
    - (Pink) Command B
  Admin:|
    - Perm Node: gpu.admin
    - (Light Red) $(Banner)
    - Mod lines 2-3
    - (Blue) Command C
    - (Bold)
  Owner:|
    - Mod lines 1-3
    - Admin line 2

【问题讨论】:

    标签: parsing syntax yaml


    【解决方案1】:

    YAML 不需要引用大多数字符串,但如果特殊字符属于特定字符列表,您需要引用它们。如果您的值包含以下任何特殊字符,请使用引号:{}[]&*#?|、@ 987654331@、<>=!%@: 还有`,

    【讨论】:

      【解决方案2】:

      您的 YAML 语法无效不是因为字符,而是因为缺少空格:

      EnforcedWorlds:|
      

      这一整行是一个字符串。您希望它是一个映射键 (EnforcedWorlds),后跟一个块标量的标头 (|)。为此,您必须在冒号后添加一个空格:

      EnforcedWorlds: |
      

      但我不确定这是否真的是你想要的。它将所有以下更多缩进的行解析为文字字符串(保留换行符)。但是内容看起来像一个 YAML 序列,所以也许你想这样写:

      EnforcedWorlds:
        - World
        - Nether
        - DIM-1
        - End
        - DIM1
      

      在这里,值将被解析为一系列标量项。

      要查看您的输入是如何被解析的,您可以使用一些网络服务:

      还有ysh,一个用于测试的交互式 YAML shell,使用 Perl。

      【讨论】:

      • 请注意PyYAML在线解析器是PyYAML 1.1
      猜你喜欢
      • 2020-12-22
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2021-01-18
      相关资源
      最近更新 更多