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

如何为SnakeYAML生成的YAML值添加双引号

SnakeYAML生成带双引号值的YAML解决方案

直接在字符串里拼接双引号没用——SnakeYAML会把引号当成字符串内容的一部分转义,所以才会出现"这类实体字符。要实现值被双引号包裹的效果,得通过自定义序列化逻辑来控制,具体步骤如下:

1. 自定义字符串序列化器

创建一个继承自Representer的类,强制所有字符串用双引号序列化:

import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.nodes.Tag;
import org.yaml.snakeyaml.representer.Representer;

public class QuotedStringRepresenter extends Representer {
    public QuotedStringRepresenter() {
        super();
        // 给字符串类型绑定双引号序列化规则
        representers.put(String.class, (data) -> 
            representScalar(Tag.STR, (String) data, DumperOptions.ScalarStyle.DOUBLE_QUOTED)
        );
    }
}

2. 使用自定义序列化器生成YAML

初始化YAML实例时传入这个自定义的Representer,再序列化你的parameter对象:

// 配置输出格式为块级风格(和你当前的输出格式一致)
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

// 用自定义序列化器创建Yaml对象
Yaml yaml = new Yaml(new QuotedStringRepresenter(), options);

// 序列化并输出
String yamlOutput = yaml.dump(parameter);
System.out.println(yamlOutput);

这样生成的YAML就会是你想要的格式:

context: "dev"
region: "asia"
lob: "all"

额外说明

  • 如果只需要给特定字段加双引号,可以在序列化逻辑里添加字段判断(比如通过反射获取字段名),但全局配置更适合你的场景。
  • 绝对不要手动给字符串拼引号,那只会让SnakeYAML把引号转义成实体字符,达不到预期效果。

内容的提问来源于stack exchange,提问作者Aashi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:30