Java 使用SnakeYaml引用转储值

Java 使用SnakeYaml引用转储值,java,yaml,snakeyaml,Java,Yaml,Snakeyaml,有一个简单的yml文件test.yml,如下所示 color: 'red' final DumperOptions yamlOptions = new DumperOptions(); yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml yaml = new Yaml(yamlOptions); Object result = yaml.l

有一个简单的yml文件
test.yml
,如下所示

color: 'red'
        final DumperOptions yamlOptions = new DumperOptions();
        yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

        Yaml yaml = new Yaml(yamlOptions);


        Object result = yaml.load(new FileInputStream(new File("test.yml")));

        System.out.println(yaml.dump(result));
我按如下方式加载和转储文件

color: 'red'
        final DumperOptions yamlOptions = new DumperOptions();
        yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

        Yaml yaml = new Yaml(yamlOptions);


        Object result = yaml.load(new FileInputStream(new File("test.yml")));

        System.out.println(yaml.dump(result));
我希望得到

color: 'red'
但是,在转储过程中,序列化程序将省略引号并打印

color: red
如何使序列化程序也打印原始引号

如何使序列化程序也打印原始引号

不使用高级API。引述:

标量样式是一种表示细节,不能用于传递内容信息,但为了标记解析而区分普通标量的情况除外

高级API实现了整个YAML加载过程,按照规范的要求,只提供YAML文件的内容,而不提供任何有关表示细节的信息

也就是说,您可以使用保留演示详细信息的低级API:

final Yaml yaml = new Yaml();
final Iterator<Event> events = yaml.parse(new StreamReader(new UnicodeReader(
        new FileInputStream(new File("test.yml"))).iterator();

final DumperOptions yamlOptions = new DumperOptions();
final Emitter emitter = new Emitter(new PrintWriter(System.out), yamlOptions);
while (events.hasNext()) emitter.emit(events.next());
final Yaml Yaml=new Yaml();
最终迭代器事件=yaml.parse(新的StreamReader(新的UnicodeReader(
新文件输入流(新文件(“test.yml”)).iterator();
最终转储选项yamlOptions=新转储选项();
最终发射器=新发射器(新PrintWriter(System.out),yamlOptions);
while(events.hasNext())emitter.emit(events.next());
但是,请注意,即使这样也不会保留输入的每个演示细节(例如,缩进和注释将不会保留)。SnakeYaml不是往返的,因此无法保留准确的输入布局

如何使序列化程序也打印原始引号

不适用于高级API。引用:

标量样式是一种表示细节,不能用于传递内容信息,但为了标记解析而区分普通标量的情况除外

高级API实现了整个YAML加载过程,按照规范的要求,只提供YAML文件的内容,而不提供任何有关表示细节的信息

也就是说,您可以使用保留演示详细信息的低级API:

final Yaml yaml = new Yaml();
final Iterator<Event> events = yaml.parse(new StreamReader(new UnicodeReader(
        new FileInputStream(new File("test.yml"))).iterator();

final DumperOptions yamlOptions = new DumperOptions();
final Emitter emitter = new Emitter(new PrintWriter(System.out), yamlOptions);
while (events.hasNext()) emitter.emit(events.next());
final Yaml Yaml=new Yaml();
最终迭代器事件=yaml.parse(新的StreamReader(新的UnicodeReader(
新文件输入流(新文件(“test.yml”)).iterator();
最终转储选项yamlOptions=新转储选项();
最终发射器=新发射器(新PrintWriter(System.out),yamlOptions);
while(events.hasNext())emitter.emit(events.next());
但是,请注意,即使这样也不会保留输入的每个演示细节(例如,缩进和注释将不会保留)。SnakeYaml不是往返的,因此无法保留准确的输入布局