【问题标题】:SnakeYaml dump function writes with single quotesSnakeYaml 转储函数使用单引号写入
【发布时间】:2018-04-05 09:40:43
【问题描述】:

考虑以下代码:

public void testDumpWriter() {
Map<String, Object> data = new HashMap<String, Object>();
data.put("NAME1", "Raj");
data.put("NAME2", "Kumar");

Yaml yaml = new Yaml();
FileWriter writer = new FileWriter("/path/to/file.yaml");
for (Map.Entry m : data.entrySet()) {
            String temp = new StringBuilder().append(m.getKey()).append(": ").append(m.getValue()).toString();
            yaml.dump(temp, file);
        }
}

上面代码的输出是

'NAME1: Raj'
'NAME2: Kumar'

但我希望输出不带单引号

NAME1: Raj
NAME2: Kumar

这个东西解析文件很舒服。 如果有人有解决方案,请帮我解决。提前致谢

【问题讨论】:

    标签: java yaml snakeyaml


    【解决方案1】:

    SnakeYaml 完全按照您的指示进行操作:对于 Map 中的每个条目,它会将键、字符串 ": " 和值的串联转储为 YAML 文档。字符串映射到 YAML 中的标量,并且由于标量包含 : 后跟空格,因此必须用引号引起来(否则它将是键值对)。

    实际上想要做的是将 Map 转储为 YAML 映射。你可以这样做:

    public void testDumpWriter() {
        Map<String, Object> data = new HashMap<String, Object>();
        data.put("NAME1", "Raj");
        data.put("NAME2", "Kumar");
    
        DumperOptions options = new DumperOptions();
        options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
        Yaml yaml = new Yaml(options);
        FileWriter writer = new FileWriter("/path/to/file.yaml");
        yaml.dump(data, writer);
    }
    

    【讨论】:

    • 谢谢,但我已经尝试过您的代码,它以 csv 格式打印 {NAME1: Raj, NAME2: Kumar}。我的问题中提到了实际的 yml 格式,并且该格式易于解析。如果我们转储太多地图,它会违反 yml 格式。请你帮忙看看实际的 yml 格式。
    • 这绝对不是 csv 格式,那是完全不同的东西。它是有效的 YAML,只有流式(设计为类似于 JSON)。我更新了代码以强制执行块样式,这正是您想要的。
    • 非常感谢,它对我的​​问题帮助很大。
    猜你喜欢
    • 2019-08-11
    • 2013-08-14
    • 2018-12-27
    • 2019-12-18
    • 2014-09-16
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多