在java中修改YAML同时保留注释

dex*_*ish 7 java yaml snakeyaml

我们如何修改现有的 YAML 并保留其中的注释。有没有 Java 解析器可以做到这一点?例如,如果我有以下 YAML:

#This is a test YAML
 name: abcd
 age: 23
#Test YAML ends here.
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用 java 解析器编辑此 Yaml 并保留注释。

fly*_*lyx 3

截至撰写本文时,还没有适用于 Java 的往返 YAML 解析器。有著名的SnakeYAML,它不保留注释(请参阅此处作者的注释),以及一个名为Camel的较新项目,我对它知之甚少;但这绝对不是往返。

理论上您可以做的是使用 SnakeYaml Yaml.parse,然后迭代事件。每个事件都有一个开始和结束标记,给出事件的开始和结束行和列。这使得将事件映射回源并发现源中未解析为事件的部分(可能是注释)成为可能。有了这个映射,您现在可以修改事件列表并将其写回。最后,您第二次读取结​​果,发现事件之间的间隙,其中原始 YAML 中有注释,但修改后的 YAML 中没有,然后重新插入这些注释,从而为您提供经过修改的最终YAML评论。

当然,这是非常复杂的。我不建议您这样做,除非您 a) 对 YAML 的结构有深入的了解或愿意学习它,并且 b) 您的用例证明了如此大量的工作是合理的。