【发布时间】:2026-01-18 10:15:02
【问题描述】:
我正在尝试从输入 Map 生成 YAML 文件,我正在使用 Jackson 和 Jackson 提供的 YamlFactory 实用程序来执行此操作。我正在尝试为 YAML 输出配置缩进属性,但似乎根本没有考虑到这一点。
我的代码如下所示:
fun getSdkResultAsGenericObject(sdkResult: Any?): Any? {
if (sdkResult == null) {
return null
}
var genericObj: Any?
val stringified = genericSdkObjectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(sdkResult)
.replace("\n", "")
val isArray = stringified.startsWith("[")
genericObj = if (isArray) {
genericSdkObjectMapper.readValue(stringified, List::class.java)
} else {
genericSdkObjectMapper.readValue(stringified, LinkedHashMap::class.java)
}
val defaultYaml = resultYamlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(genericObj )
}
resultYamlMapper 的声明是这样的:
val yamlFactory = YAMLFactory()
.configure(YAMLGenerator.Feature.SPLIT_LINES, false)
.configure(YAMLGenerator.Feature.INDENT_ARRAYS, true)
val resultYamlMapper = ObjectMapper(YamlFactory())
文档说INDENT_ARRAYS 功能默认使用 2 个空格。我试图了解如何配置它?在生成的 YAML 中我需要 4 个空格。我尝试设置一个漂亮的印刷作家:
val yamlFactory = YAMLFactory()
.configure(YAMLGenerator.Feature.SPLIT_LINES, false)
.configure(YAMLGenerator.Feature.INDENT_ARRAYS, true)
val resultYamlMapper = ObjectMapper(YamlFactory())
val arrayIndenter = DefaultIndenter(" ", DefaultIndenter.SYS_LF)
val objectIndenter = DefaultIndenter(" ", DefaultIndenter.SYS_LF)
resultYamlMapper.setDefaultPrettyPrinter(DefaultPrettyPrinter().withObjectIndenter(objectIndenter).withArrayIndenter(arrayIndenter))
但这似乎根本不被尊重。有什么想法吗?或者杰克逊根本不允许你配置缩进?
【问题讨论】: