有一个简单的 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
如何使序列化器也打印原始报价?
如何使序列化器也打印原始报价?
不适用于高级 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 不是往返的,因此无法保留确切的输入布局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)