SnakeYAML格式化:移除YAML花括号及LinkedHashMap转YAML问题
解决SnakeYAML导出YAML时移除花括号的问题
嘿,我懂你现在的困扰——用LinkedHashMap生成YAML时总带着花括号,看起来特别别扭对吧?别担心,这是SnakeYAML默认的Flow风格在搞鬼,咱们调整下配置就能轻松搞定。
问题根源
你代码里设置了options.setPrettyFlow(true),这个配置只是让Flow风格的输出更整齐,但并没有切换到完全的块级(Block)风格。当SnakeYAML处理简单键值对集合时,默认会用Flow风格(也就是花括号包裹)来输出,这就是你看到花括号的原因。
解决方案:强制使用块级风格
只需要给DumperOptions加一行关键配置,把默认的Flow风格设置为BLOCK,就能让所有键值对用缩进的块级格式输出,彻底去掉花括号。
修改后的完整代码如下:
import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.LinkedHashMap; public class TestDump { public static void main(String[] args) { LinkedHashMap<String, Object> values = new LinkedHashMap<>(); values.put("one", 1); values.put("two", 2); values.put("three", 3); DumperOptions options = new DumperOptions(); options.setIndent(2); // 核心配置:强制切换为块级风格,替代默认的Flow风格 options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml output = new Yaml(options); File targetYAMLFile = new File("C:\\temp\\sample.yaml"); // 用try-with-resources自动管理IO资源,避免泄漏 try (FileWriter writer = new FileWriter(targetYAMLFile)) { output.dump(values, writer); } catch (IOException e) { e.printStackTrace(); } } }
最终输出效果
修改后生成的sample.yaml会变成标准的YAML块级格式,完全看不到花括号:
one: 1 two: 2 three: 3
补充小贴士
- 如果你的LinkedHashMap里嵌套了List或其他Map,这个配置也会让嵌套结构自动用合适的块级/列表格式输出,不会出现花括号。
- 记得移除
setPrettyFlow(true),块级风格下这个配置没有作用,反而可能造成混淆。
内容的提问来源于stack exchange,提问作者Mark Estrada
相关产品推荐
相关产品推荐

