gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:26:54 25 4
gpt4 key购买 nike

众所周知,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com