我正在开发一个将文件从 JSON 转换为 YAML 的项目。我正在使用以下库的 2.8.3 版本:
我的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 停止将字符串值封装在引号中?
有一个名为
YAMLGenerator
的
MINIMIZE_QUOTES
功能可以关闭引号。
您可以像这样创建enable()
时
YAMLFactory
:
ObjectMapper mapper = new ObjectMapper(new YAMLFactory().enable(YAMLGenerator.Feature.MINIMIZE_QUOTES));
除了最小化引号之外,您还可以通过 disabling 或 enabling 功能来自定义 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);