【问题标题】:Snake yaml dumper options generating unnecessary escape spaces character ("\ ") for a String with spaces when converting from map to yamlSnake yaml dumper 选项在从 map 转换为 yaml 时为带空格的字符串生成不必要的转义空格字符 ("\")
【发布时间】:2020-09-14 18:36:36
【问题描述】:

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

我又遇到了一个问题,从地图到带有空格的 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"
--------------------------------

谁能帮我解决这个问题?提前致谢!

【问题讨论】:

    标签: java spring yaml snakeyaml


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢flyx。这对我有帮助。我能够通过您的解决方案获得所需的代表。
    • 嗨 @flyx,感谢您帮助我解决 yaml 问题。您能否就这个问题向我提出建议stackoverflow.com/questions/63944965/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多