java - 删除 YAML 文件中键值对之前的破折号

标签 java yaml

众所周知,YAML 文件中键值对之前的破折号 (-) 是必要的,以表明它是单独的 block (这是我的想法)。 Figure 1显示我使用 YamlBeans jar 生成的 YAML。

field1:
-  childfield1:
      datafield1:
         param1:
            childparam: paramvalue
         param2:
            childparam2: paramvalue
         param3:
            childparam3: paramvalue
      datafield2: value2

由于我的代码库无法更改,我必须以某种方式创建 YAML,如 Figure 2 中所示(在 yaml 文件的每一行中附加一个制表符)或删除破折号。您可以清楚地观察到图 1 中只有两条细垂直线,但图 2 中只有 3 条细垂直线,这显示了 block 的对齐情况。

我想要实现的是从文件的第一个 block (在子字段)中删除破折号。使用 YAML 文件读取器和写入器总是会引入破折号。

最佳答案

快速浏览一下(但不可否认的是不熟悉)YamlBeans,看起来对 Emitter 的行为进行子类化并不容易。一种选择是在内存中生成临时形式,然后在写入文件时操纵结果。例如

    // let YamlWriter write its contents to an in-memory buffer
    StringWriter temp = new StringWriter();
    YamlWriter yamlOut = new YamlWriter(temp);
    yamlOut.write(someObject);

    // then dump the in-memory buffer out to a file, manipulating lines that
    // start with a dash
    PrintWriter out = new PrintWriter(new FileWriter(new File("someoutput.dat")));
    LineNumberReader in = new LineNumberReader(new StringReader(temp.toString()));
    String line;
    while ((line = in.readLine()) != null) {
        if (line.startsWith("-")) {
            line = line.substring(1);
        }
        out.println(line);
    }

我的细节可能不准确,但希望对临时副本进行简单操作的方法足够清楚。

如果我亲自这样做,我可能会编写 java.io.Writer 的自定义子类并即时进行操作(但我还没有经历过 YamlWriter/Emitter足够的细节来提供如何做到这一点的示例)

关于java - 删除 YAML 文件中键值对之前的破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39760003/

相关文章:

java - 专家系统设计 : logic programming (Prolog) versus general purpose programming (Java)

java - 用 snakeyaml 解析 beans 列表

azure - 当指定分支的拉取请求完成时触发下一个管道阶段

java - 错误 : conflicting types using C in Android ndk

Java, (low + high) >>> 1 会溢出吗?

java - 如何从资源中引用xml文件? eclipse

java - 首次运行 jhipster 应用程序时出错

java - Spring Boot中一个类的多个配置树

ruby-on-rails - rails database.yml 不接受 ERB

c# - YamlDotNet - 自定义序列化