Java 使用SnakeYaml引用转储值
有一个简单的yml文件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
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不是往返的,因此无法保留准确的输入布局