gpt4 book ai didi

java - 从映射转换为 yaml 时,Snake yaml 转储器选项会为带有空格的字符串生成不必要的转义空格字符 ("\")

转载 作者:行者123 更新时间:2023-12-01 16:30:40 28 4
gpt4 key购买 nike

我正在尝试读取 Yaml 模板并动态替换模板中的某些字段,并使用 Snake Yaml 创建一个新的 Yaml 文件。但是,当我使用蛇 yaml 时,如果字符串包含必填字段的空格,我会得到转义空格字符。有人可以建议解决这个问题吗?

我在使用空格将 map 转换为 yaml 时遇到了另一个问题。

示例:

--------------------------------
version: snapshot-01
kind: sample
metadata:
name: abc
options: "<placeholder>"
--------------------------------

我正在阅读上述模板并动态替换所需字段,如下所示。

 Yaml yaml = new Yaml();
InputStream inputStream =
this.getClass().getClassLoader().getResourceAsStream(yamlTemplateLocation);
Map<String, Object>yamlMap = yaml.load(inputStream);

当我用包含空格的字符串替换占位符时,例如:“abc sfksajfkl jfajfkjakj jqjlkkalkl kajklfjalkd”

yamlMap.put("version","v-1.0");
yamlMap.put("options","abc sfksajfkl jfajfkjakj jqjlkkalkl kajklfjalkd");

我得到的输出为

--------------------------------
version: "v-1.0"
kind: sample
metadata:
name: abc
options: "abc sfksajfkl jfajfkjakj
\ jqjlkkalkl kajklfjalkd "
--------------------------------

注意:它正在生成转义空格字符(即“\”)在“abc sfksajfkl jfajfkjakj\jqjlkkalkl kajklfjalkd”

但我的要求如下 - 不应生成任何转义空格字符

--------------------------------
version: "v-1.0"
kind: sample
metadata:
name: abc
options: "abc sfksajfkl jfajfkjakj jqjlkkalkl kajklfjalkd"
--------------------------------

有人可以帮我解决这个问题吗?提前致谢!

最佳答案

您显示的代码与 YAML 输出不匹配,因为该代码只有单个空格。我假设 YAML 中的内容是放入 map 中的实际字符串,因为您显示的代码不会生成此 YAML,并且您的要求还包括双空格。

转义字符只是换行的副作用。当将带引号的标量拆分为多行时,换行符会折叠成单个空格。但是,单词之间有多个空格,因此 YAML 必须插入转义空格以将第二个空格标记为内容(第二行开头的所有非转义空格都被视为缩进,而不是内容的一部分)。

所以你需要解决的实际问题是断行。您可以像这样禁用它:

DumperOptions options = new DumperOptions();
options.setSplitLines(false);
Yaml yaml = new Yaml(options);
System.out.println(yaml.dump(yamlMap));

顺便说一句,带有换行符和转义空格的 YAML 确实可以正确加载。尽量不要对 YAML 表示提出太具体的要求,因为您无法完全控制它。

关于java - 从映射转换为 yaml 时,Snake yaml 转储器选项会为带有空格的字符串生成不必要的转义空格字符 ("\"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62047880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com