如何在YAML字符串中转义冒号和其他特殊字符?

时间:2015-10-07 11:52:59

标签: escaping yaml swagger

我有以下YAML片段:

description: |
  "API for bean consuming applications.
  Examples: painted pony, lima bean"

Swagger editor将冒号(:)解释为特殊字符,尽管有引号。

根据this question的接受答案,结肠不应被视为特殊字符。

这是Swagger的错误还是在引用的文本文字中使用冒号所需的转义序列?

我尝试使用YAML specification找到这个,但放弃了。

我如何阅读该规范来回答这个问题?

YAML中单引号(')和双引号(")之间是否存在差异?

管道(|)或大于(>)构造是否仅影响换行处理或处理特殊字符?

3 个答案:

答案 0 :(得分:17)

我会认为这是一个招摇的错误,但我在其他编辑器中看到了问题,例如在突出显示YAML时。

当字符串标量被single quotes '....'包围时,该字符串中唯一可以转义的是插入双引号以表示单引号:

'It''s a good question'

double quotes"...."绕过标量字符串时,使用反斜杠(\)进行转义,并且必须至少转义反斜杠和双引号。此外,您可以转义其他特殊字符,例如换行符(\n),并通过在反斜杠前面使用它来转义行尾。

YAML规范说no way to escape characters inside literal scalars(从|开始),因此您无法插入额外的换行符或其他转义序列。

对于折叠样式(>),转义行为与文字标量一样。

除了普通标量(没有任何引号或> / |的标量)之外的所有字符串标量都可以包含:后跟空格而不会出现问题,如果编辑器解释的不同,那么是可以理解的(因为完整的YAML解析很昂贵),但不正确。

答案 1 :(得分:16)

我遇到了完全相同的问题,并发现使用HTML转义码可以使用:,这就是我所使用的。

答案 2 :(得分:2)

以其他评论中已经提供的答案为基础:http://yaml.org/spec/1.2/spec.html#id2788097

从这里: https://yaml.org/spec/1.2/spec.html#id2776092

我发现使用任何引号都可以只使用两个冒号来转义冒号特殊字符。即:::

因此描述将变为:

docker-machine restart default eval $(docker-machine env default)