如何利用YAML作为JSON超集的特性实现两者混合编写?
如何在JSON风格的YAML中混合使用YAML多行字面量?
问题描述
YAML是JSON的超集,支持直接在.yml文件中写入JSON内容。我希望以编写JSON风格的代码为主,仅在处理多行内容时切换为YAML的|字面量风格,但尝试的写法触发报错:
Plain value cannot start with block scalar indicator | at line 3, column 20:
解决方案
核心问题在于:JSON语法的字符串值不允许直接嵌入YAML的块标量符号|,必须遵循YAML的语法规则来混合两种写法,具体可按以下方式实现:
合法的混合写法示例
{ "title": "JSON风格的键值对", "short_desc": "这是标准JSON格式的字符串值", "long_content": | 第一行多行内容 第二行内容 第三行,使用YAML字面量格式保留换行 }
关键说明
- 大部分键值对可以保留JSON风格(双引号包裹键和字符串值),完全符合YAML作为JSON超集的特性。
- 需要多行内容的键值对,改用YAML语法书写:键可以选择带双引号或不带(YAML支持无引号的合法键名),值直接使用
|块标量,与键之间用冒号加空格分隔。 - 这种混合写法完全兼容YAML解析器,既满足了以JSON为主的编写习惯,又能利用YAML的多行字面量简化长文本编写。
错误写法规避
不要尝试在JSON风格的字符串值中插入|,比如以下写法会触发你遇到的报错:
{ "long_content": "| 第一行内容 第二行内容 " }
这种写法将|作为JSON字符串的一部分,违反了YAML对块标量的语法要求,导致解析失败。
内容的提问来源于stack exchange,提问作者James F
相关产品推荐
相关产品推荐

