SnakeYaml 从字符串第一行转储

SnakeYaml dumping from String First Line

我正在尝试从纯 java 字符串创建一个 yaml 文件。但是,我创建的 yaml 文件的初始行为:

|2

yaml 文件的其余部分很好,但第一行非常有趣。 我的 DumperOptions 如下;

DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
Yaml yaml = new Yaml(options);
// Build the complex String here.
String dump = yaml.dump(builder.toString());

是的,我可以直接从 StringBuilder 中删除初始行,但我想知道解决方案甚至问题的原因。

谢谢

没问题,如果您将单个字符串转储到 YAML 文件,库可以通过多种方式执行此操作。这里它使用 block indention indicator 在文字块模式下这样做。您自己请求了块样式 (DumperOptions.FlowStyle.BLOCK),因此块指示符 (|) 必须存在,但缩进指示符可能需要也可能不需要。

"The rest of the YAML file is just fine" 只是因为那是你的单个 Java 字符串缩进了两个 spaces.

如果字符串以 space and/or 开头且字符串中有特殊字符(例如换行符),YAML 发射器需要做一些特殊的事情。他们可以使用引号(单引号或双引号)或恢复为块文字(使用 |)。如果字符串标量以一个或多个空格开头,块文字需要有数字来指示缩进级别,否则将从第一行计算出太大的缩进级别。通常,在分析字符串后并根据上下文决定使用什么(带或不带引号的普通样式或块样式)。在你的情况下,你强制它阻止样式。

您可以通过从字符串中去除任何前导白色 space 来从第一行获得 2,但要摆脱 |,您可能需要有一个没有换行符的字符串并删除 BLOCK 流样式的设置。