YAML 如何解释特殊字符

Nat*_*yer 2 syntax parsing yaml

所以,我试图用 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
Run Code Online (Sandbox Code Playgroud)

The*_*eke 7

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


fly*_*lyx 7

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

EnforcedWorlds:|
Run Code Online (Sandbox Code Playgroud)

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

EnforcedWorlds: |
Run Code Online (Sandbox Code Playgroud)

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

EnforcedWorlds:
  - World
  - Nether
  - DIM-1
  - End
  - DIM1
Run Code Online (Sandbox Code Playgroud)

在这里,该值将被解析为标量项的序列。

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

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