如何阻止 Jackson 的 YAML 编写器引用值

问题描述 投票:0回答:2

我正在开发一个将文件从 JSON 转换为 YAML 的项目。我正在使用以下库的 2.8.3 版本:

  • 杰克逊核心
  • 杰克逊数据绑定
  • 杰克逊数据格式-yaml
  • 杰克逊注释

我的YAML序列化代码非常简单:

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
ObjectWriter writer = mapper.writer();

try {
    SequenceWriter sw = writer.writeValues(System.out);
    sw.write(tree);
}
catch (IOException e) {
    e.printStackTrace();
}

此代码生成的 YAML 如下所示:

serviceType: "elasticSearch"
displayName: "Elasticsearch Service"
description: "Sample Elastic Search Service"

虽然它是有效的 YAML,但我不喜欢值周围的双引号。您在 YAML 中不需要它们,这会使编辑结果文件变得更加麻烦。有谁知道如何配置 ObjectWriter 以使 Jackson 停止将字符串值封装在引号中?

java jackson yaml
2个回答
36
投票

有一个名为

YAMLGenerator
MINIMIZE_QUOTES
功能可以关闭引号。

您可以像这样创建enable()

YAMLFactory

ObjectMapper mapper = new ObjectMapper(new YAMLFactory().enable(YAMLGenerator.Feature.MINIMIZE_QUOTES));

0
投票

除了最小化引号之外,您还可以通过 disablingenabling 功能来自定义 yaml,如下所示:

YAMLFactory ymlFormatter = new YAMLFactory()
      .disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)  //removes marker characters ---
      .enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
      .disable(YAMLGenerator.Feature.ALWAYS_QUOTE_NUMBERS_AS_STRINGS)  //avoid numbers being quote
      .enable(YAMLGenerator.Feature.INDENT_ARRAYS_WITH_INDICATOR);  //list array elements by prefixing hifen

ObjectMapper mapper = new ObjectMapper(ymlFormatter);
© www.soinside.com 2019 - 2024. All rights reserved.