如何为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
相关产品推荐
相关产品推荐

