You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:45:01