2015-10-07 1946 views
13

我有以下YAML片段:如何在YAML字符串中避开冒号和其他特殊字符?

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

Swagger editor解释结肠(:)作为特殊字符,尽管引号。

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

这是一个Swagger的错误,或者是在引用文本文字中使用冒号所需的转义序列?

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

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

YAML中的单引号(')和双引号(")有区别吗?

管道(|)或大于(>)的结构只影响换行符处理或处理特殊字符吗?

+1

如果您将此片段粘贴到[Online YAML Parser](http://yaml-online-parser.appspot.com/)中,您会发现不仅冒号保存在“description”值中,而且还包含引号标记自己。实际上引号对* flow *标量具有特殊含义,而对* block *标量则不具有“|”标记的标量和'>'。 – Tsyvarev

+0

对于这种类型的问题,在线编辑器有很多帮助:http://editor.swagger。io/ –

+0

我经历了不同的YAML工具行为非常不一致,所以我不会依赖一些工具行为来说出是否有错。这就是我明确要求的规范。 – Gustave

回答

8

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

当串标被single quotes'....'包围了只有字符串可以做的是将一个双单引号表示一个单引号内的转义:

'It''s a good question' 

double quotes"....",去周围标量字符串使用反斜杠(\)进行转义,并且必须至少反转反斜杠和双引号。此外,您可以转义其他特殊字符(如换行符)(\n),并通过在反斜杠之前加一个换行符。

YAML规范说有no way to escape characters inside literal scalars(从|开始),但这不是如何,例如, PyYAML的行为(我并没有意识到我的ruamel.yaml)。有了这些,你可以使用反斜杠来插入例如额外的换行符。

对于折叠样式(>),没有明确提及转义或不转义。

除了简单的标量全部串标量(没有引号或者>/|)可以包含:其次是空间没有问题,如果一个编辑解释是不同的,这是可以理解的(如全YAML解析是昂贵的)但不正确。

+0

感谢您的回答!但我仍无法找到规范的相关部分。您提供的链接将我带到“3.2.1.3。节点比较”。这与逃生机制有什么关系? – Gustave

+0

@Gustave对不起,粘贴错误的链接。我已经更新了它。它正好在例子8.8 – Anthon

+1

之前的句子中。对于它的价值,链接的规范是针对YAML 1.2的,其中包含来自YAML 1.1的重大更改。 PyYAML使用1.1规范。参考:http://pyyaml.org/wiki/PYYAML –

7

我有完全相同的问题,并发现使用HTML转义代码:,这是我诉诸。

相关问题