使用 Yaml 折叠>字符串表示 JSON 字符串会导致添加意外的换行符



使用YAML折叠表示JSON字符串>字符串导致添加意外的换行符。是否可以表示示例字符串,而不在折叠字符串中的每一行后面引入换行符?

- yaml: >-
{
"This" : "is supposed to be a JSON string.",
"it" : "is not meant to be a yaml map itself.",
"And": "if this string were passed into"
"a": "json parser, it would THEN parse as a JSON map."
"The": "confusing part to me is the newlines."
"Normally": ">- folded style strings do not introduce"
"newline": "characters between lines within the yaml"
"folded": "There shouldn't be any newlines added."
"But": "several unexpected newlines are introduced."
"Does": "This have something to do with the special"
"characters": "in the string?"
}

这是生成的字符串,当解析时,在折叠的>-样式字符串。

  • https://yaml.org/spec/1.2.2/#813-折叠式
  • https://yaml-multiline.info/

[{"yaml":"如果该字符串被传递到";\n〃;a":"json解析器,然后解析为JSON映射"\n〃;":"让我困惑的是换行符"\n〃;通常为":"gt;-折叠样式的字符串不引入";\n〃;换行符":"行之间的字符yaml";\n〃;折叠":"不应该添加任何换行符"\n"但是":"引入了几个意想不到的换行符"\n〃;是否":"这与特殊的";\n〃;字符":"在里面绳子"\n} }]

根据我阅读的规范,这不应该发生。这种情况在其他折叠字符串中不会发生,但在这个例子中会发生,也许这与特殊字符有关。

尽管我在至少两个YAML解析器(Python的pyyaml和Java的snake YAML(中看到过它这样做。它也出现在这个yaml解析器Web应用程序中。

要么是我误解了规范,要么是库都错误地实现了规范(也许是故意的,为了彼此兼容(。

最终,我之所以这么问,是因为我想在项目中使用YAML作为配置文件。但我担心我将无法完全按照我想要的方式表示多行字符串(如果不引入意外的空格、换行符等(

您直接链接的规范部分解决了以下问题:

以空格字符开头的行(缩进较多的行(不会折叠。

规范中的示例8.10和8.11显示了如何不折叠更多缩进的行。在您的YAML代码中,除了{}之外的所有内容都更加缩进,因此,行不会折叠。

背景是折叠块标量希望使您能够拥有项目符号列表之类的东西,例如

content: >
foo

* one
* two
bar

这些项目符号应该分别解析为一整行,因此规则是不折叠更多缩进的行。正如您的示例所示,该规则已被证明对YAML出现的用例相当有害。

如果你不想要这种行为,我建议定义一个本地标签,如下所示:

content: !fold |
foo

* one
* two

bar

然后,您可以为标记编写一个自定义构造函数,它可以像您希望的那样在最初展开的文本块标量内容上进行换行。

相关内容

  • 没有找到相关文章

最新更新