使用eo-yaml正确生成YAML文件及无换行格式错误的解决咨询
问题根因
- 遍历字段逻辑错误:for循环内部每次新建独立
YamlMapping实例,每处理一个字段就直接写入文件,未将所有字段整合为同一个YAML映射结构,导致多段独立紧凑格式的KV直接拼接为无换行单行内容 - 输出方式错误:
YamlMapping.toString()默认输出无换行的紧凑序列化结果,未启用格式化输出能力
修正后的代码
生成方法调整后代码
// 先构建完整的YamlMapping,再统一输出 YamlMappingBuilder yamlBuilder = Yaml.createYamlMappingBuilder(); for ( Field field : clazz.getDeclaredFields() ) { if (Modifier.isPrivate(field.getModifiers())) { field.setAccessible(true); } Object value = null; try { value = field.get(this); } catch (IllegalAccessException e) { e.printStackTrace(); } // 所有字段都添加到同一个builder中 yamlBuilder.add(field.getName(), value.toString()); } // 构建完整的YAML映射 YamlMapping yaml = yamlBuilder.build(); try { // 使用YamlPrinter配置格式化输出,启用缩进和换行 YamlPrinter printer = new YamlPrinter(fileWriter, true, 2); printer.print(yaml); fileWriter.flush(); } catch (IOException e) { e.printStackTrace(); }
核心修改点说明
- 将
YamlMappingBuilder的初始化移到循环外部,所有字段统一添加到同一个构建器,最终生成完整的YAML结构,避免多段内容拼接 - 替换原有的
toString()直接写入逻辑,使用YamlPrinter配置格式化输出,第二个参数设为true代表启用换行,第三个参数为缩进空格数,输出后即可得到符合标准的多行YAML格式。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

