众所周知,键值对之前的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文件读取器和写入器始终引入短划线。
答案 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详细介绍提供一个如何做到这一点的例子)