YAML中流映射/序列闭合符与父键同缩进是否为合法写法?
流结构闭合字符与父级键同缩进的YAML合法性说明
严格规范层面的结论
按照YAML 1.2官方语法规则,流映射({}包裹的结构)、流序列([]包裹的结构)的闭合字符与父级键保持相同缩进位置的写法,不属于严格合法的YAML语法。
待判定的争议写法示例如下:
foo: { "a": "b" }
该示例中末尾的}和父级键foo缩进位置完全对齐,在YAML官网提供的YPaste交互式参考解析器中测试会直接抛出语法错误,不符合规范对缩进的约束要求。
实际解析兼容情况
虽然严格意义上不符合规范,但目前绝大多数主流YAML解析器都对这种写法做了容错适配,可以正常识别解析,不会抛出错误。这种把闭合括号和起始声明键对齐的排版符合多数开发者的代码书写习惯,可读性更强,因此实际工程中这种写法的使用频率很高,极少触发解析问题。
严格合规的参考写法
按照YAML规范明确的缩进规则,流结构的闭合字符需要比父级键多缩进至少1位,才属于无争议的合法YAML写法,示例如下:
foo: { "a": "b" }
这种写法下}的缩进比foo多1个空格,完全符合语法约束,在所有YAML解析器中都可以无兼容问题正常识别。如果你的场景需要保证YAML文档100%跨解析器兼容、完全贴合官方标准,优先使用这种缩进方式即可。
内容的提问来源于stack exchange,提问作者Zac Romero
相关产品推荐
相关产品推荐

