如何在 LoaderOptions 和 DumperOptions 上使用 SnakeYaml setProcessComments()

问题描述 投票:0回答:2

SnakeYaml API 似乎有一个非常有趣的功能,可以在加载和转储期间保留注释 (

setProcessComments(true)
)。我已在调试器中确认它确实会摄取并跟踪注释,因为我可以在使用
Node
后在
compose(fileStream)
表示树上找到它们。但是,我还没有找到有关此功能的任何类型的文档或它如何有用,特别是在输出方面。但这似乎确实是可能的,因为
DumperOptions.setProcessComments(true)
可用。

我找到的所有文档都集中在

Map
和/或 JavaBean 加载和转储上,这两者似乎都无法从存储在
Node
树上的注释中受益。或者,如果是的话,我不清楚如何。

谁能提供一个相对简单的“往返”示例,其中 YAML 文件加载注释,然后转储注释?

java yaml snakeyaml
2个回答
0
投票

明白了。很简单,这种模式似乎对我有用:


import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.representer.Representer;

// ...

LoaderOptions loadOptions = new LoaderOptions();
loadOptions.setProcessComments(true);
DumperOptions dumpOptions = new DumperOptions();
dumpOptions.setProcessComments(true);
Yaml yaml = new Yaml(new SafeConstructor(loadOptions), new Representer(dumpOptions), dumpOptions, loadOptions);
Node rootNode = yaml.compose(myInputStream);

// ...

yaml.serialize(rootNode, outputWriter);

0
投票
Yaml yaml = new Yaml(new Constructor(SaintsDto.class));
        try (InputStream inputStream = RoughMain.class.getClassLoader().getResourceAsStream("static/saints.yml")) {
            Iterable<Object> itr = yaml.loadAll(inputStream);

            for(Object obj: itr){
                SaintsDto saintsDto = (SaintsDto) obj;
                saintsDtoList.add(saintsDto);
            }

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

错误:不兼容的类型:类无法转换为LoaderOptions Yaml yaml = new Yaml(new Constructor(SaintsDto.class)); ^

© www.soinside.com 2019 - 2024. All rights reserved.