json - YAML 作为 JSON 超集和 TAB 字符

标签 json tabs yaml whitespace

我无法准确找到对此错误的引用,但 YAML 1.2 表示它是 JSON 超集,如果我在 JSON 中使用制表符,它会将其视为错误。

例如

"root": {
        "key": "value"
}

(在线验证 here 表示 '\t' 无法启动任何 token )

我知道为什么 YAML 历史上不允许使用制表符,但是我如何在 JSON 超集的上下文中解释这一点?

(例如,YAML 不是实际的超集还是 JSON 也不允许使用制表符?或者在这种情况下规范确实允许使用制表符,但尚未实现?)

谢谢。

最佳答案

YAML 中允许使用制表符,但仅限于不适用缩进的情况。

根据YAML 1.2 Section 5.5 :

YAML recognizes two white space characters: space and tab.

以下示例将使用 · 表示空格,使用 表示制表符。所有示例都可以使用官方 YAML Reference Parser 进行验证.

YAML有 block 风格和流风格。在 block 样式中,缩进决定了文档的结构。以下文档使用 block 样式。

root:
··key: value

Validate

在流样式中,特殊字符指示文档的结构。以下等效文档使用流程样式。

{
→ root: {
→ → key: value
→ }
}

Validate

您甚至可以在流程样式中混合缩进。

{
→ root: {
··→ key: value
····}
}

Validate

如果您混合使用 block 样式和流样式,则整个流样式部分必须遵循 block 样式缩进。

root:
··{
····key: value
··}

Validate

但是您仍然可以在流程样式部分中混合缩进。

root:
··{
··→ key: value
··}

Validate

如果您有一个有价文档,您可以用各种空白包围该值。

→ ··value··→ 

Validate

重点是,每个解析为 YAML 的 JSON 文档都会将文档置于支持选项卡的流样式(因为最初的 {[ 字符),除非它是单值 JSON 文档,在这种情况下,YAML 仍然允许使用空格填充。

如果 YAML 解析器因 JSON 文档中的制表符而抛出异常,则它不是有效的解析器。

话虽这么说,您的示例失败了,因为如果 block 样式映射值与映射名称不在同一行,则必须始终缩进。

root: {
··key: value
}

not valid ,但是

root:
··{
····key: value
··}

valid ,并且

root: { key: value }

也是valid .

关于json - YAML 作为 JSON 超集和 TAB 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974485/

相关文章:

javascript - 解析和访问 JSON 数据

java - 转换为 JSON 字符串时扩展类中的数据丢失

mysql - 双轴、折线图和柱形图中的 HighCharts 问题

docker - 如何验证我的 docker-compose.yml?

ruby to_yaml utf8 字符串

python - 如何在 Python 中从此 JSON 中获取 'url' 变量

jquery - 如何禁用 JQuery 选项卡上的单击事件?

c++ - 尽管应用了已知的抗闪烁技术,但我的应用程序在调整大小时略微闪烁

c# - 如何动态列出和访问 TabPage 对象

ansible - 如何让 Ansible 多行 > 忽略行中的空格?