具有以下简单的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'
但是,在转储过程中,序列化程序会忽略引号和打印内容
color: red
如何使序列化程序也打印原始报价?
答案 0 :(得分:0)
如何使序列化程序也打印原始报价?
不适用于高级API。引用the spec:
标量样式是表示形式的详细信息,除用于标记解析的目的是区分普通标量外,不得用于传达内容信息。
高级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());
但是,请注意,即使这样也不会保留您输入的每个演示文稿详细信息(例如,缩进和注释将不会保留)。 SnakeYaml不是双向传递的,因此无法保留确切的输入布局。