【问题标题】:Dumping values with quotes with SnakeYaml使用 SnakeYaml 转储带引号的值
【发布时间】:2019-08-11 15:02:37
【问题描述】:

有一个简单的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

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

【问题讨论】:

    标签: java yaml snakeyaml


    【解决方案1】:

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

    不使用高级 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());
    

    但是,请注意,即使这样也不会保留您输入的每个表示细节(例如,不会保留缩进和 cmets)。 SnakeYaml 不是往返的,因此无法保留准确的输入布局。

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 2013-08-14
      • 2019-12-18
      • 2018-11-04
      • 2018-12-02
      • 2019-01-16
      • 2012-05-01
      • 2014-12-18
      • 1970-01-01
      相关资源
      最近更新 更多