如何使用Java SnakeYAML生成包含嵌套子字段的YAML配置文件
解决方案
SnakeYAML 会直接将 Java 中的嵌套 Map 结构序列化为 YAML 的嵌套层级结构,你之前输出扁平化结构是因为仅使用了单层 Map,要生成目标嵌套 YAML 只需要构造对应层级的嵌套 Map 即可。
修改后完整代码
import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; public class YamlGenerator { public static void main(String[] args) { // 构造三层嵌套Map对应YAML的层级关系 Map<String, Object> innerIdMap = new HashMap<>(); innerIdMap.put("id", 1234); Map<String, Object> testUserMap = new HashMap<>(); testUserMap.put("test", innerIdMap); Map<String, Object> dataMap = new HashMap<>(); dataMap.put("admins", testUserMap); // 原有DumperOptions配置保持不变 DumperOptions options = new DumperOptions(); options.setIndent(2); options.setPrettyFlow(true); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml yaml = new Yaml(options); PrintWriter writer = null; try { writer = new PrintWriter(new File("./src/main/resources/admins.yml")); yaml.dump(dataMap, writer); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { // 增加流关闭逻辑避免资源泄漏 if (writer != null) { writer.close(); } } } }
输出结果
运行上述代码后会生成你需要的目标YAML结构:
admins: test: id: 1234
扩展说明
- 如果需要构造更多层级的嵌套结构,只需要按照YAML的层级对应构造多层嵌套Map即可,SnakeYAML会自动处理序列化逻辑
- 原有DumperOptions的缩进、块格式配置不需要修改,可直接复用
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

