删除YAML文件中键值对之前的短划线

时间:2016-09-29 01:31:50

标签: java yaml

众所周知,键值对之前的YAML文件中的短划线(-)是必要的,以表明它是单独的块(这是我的想法)。 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中有三条细垂直线,显示了这些块的对齐情况。

我想要实现的是从文件的第一个块(在子字段中)中删除该破折号。使用YAML文件读取器和写入器始终引入短划线。

1 个答案:

答案 0 :(得分:1)

快速浏览(但事实上并不熟悉)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详细介绍提供一个如何做到这一点的例子)