我正在搜索一个yaml文档对象模型,该模型允许我动态地编写文档。
我不知道属性等,所以我不能安排一个强类型的对象。
下面是我搜索的伪代码:(语法不重要,当然可以不同)。
Yaml yamlDoc = new Yaml();
YamlNode root = yamlDoc.addNode(null, "auto-update");
YamlNode forceUpdateNode = yamlDoc.addNode(root, "force-update");
forceUpdateNode.setValue("${AUTO_UPDATE_FORCE_UPDATE:false}");
YamlNode timeoutSeconds = yamlDoc.addNode(forceUpdateNode , "timeout-seconds");
timeoutSeconds.setValue("${AUTO_UPDATE_FORCE_UPDATE_TIMEOUT_SECONDS:10}");结果yaml应该如下所示:
auto-update:
force-update: ${AUTO_UPDATE_FORCE_UPDATE:false}
timeout-seconds: ${AUTO_UPDATE_FORCE_UPDATE_TIMEOUT_SECONDS:10}SnakeYaml和Jackson都是为了序列化对象,因此它们看起来是有限的。
另一种选择可能是创建一些通用对象并手动序列化它?
发布于 2021-07-04 22:16:52
SnakeYaml确实为此提供了一个API:
MappingNode root = new MappingNode(
Tag.MAP, new ArrayList<NodeTuple>, DumperOptions.FlowStyle.BLOCK);
MappingNode autoUpdate = new MappingNode(
Tag.MAP, new ArrayList<NodeTuple>, DumperOptions.FlowStyle.BLOCK);
root.getValue().add(new NodeTuple(
new ScalarNode(
Tag.STR, "auto-update", null, null, DumperOptions.ScalarStyle.PLAIN
), autoUpdate
));
NodeTuple forceUpdateEntry = new NodeTuple(
new ScalarNode(
Tag.STR, "force-update", null, null, DumperOptions.ScalarStyle.PLAIN
), new ScalarNode(
Tag.STR, "${AUTO_UPDATE_FORCE_UPDATE:false}", null, null,
DumperOptions.ScalarStyle.DOUBLE_QUOTED
)
);
autoUpdate.getValue().add(forceUpdateEntry);
NodeTuple timeoutSecondsEntry = new NodeTuple(
new ScalarNode(
Tag.STR, "timeout-seconds", null, null, DumperOptions.ScalarStyle.PLAIN
), new ScalarNode(
Tag.STR, "${AUTO_UPDATE_FORCE_UPDATE_TIMEOUT_SECONDS:10}", null, null,
DumperOptions.ScalarStyle.DOUBLE_QUOTED
)
);
autoUpdate.getValue().add(timeoutSecondsEntry);
Yaml yaml = new Yaml();
yaml.serialize(root, new PrintWriter(System.out));如您所见,API允许您微调输出参数(块与流映射样式,引用与普通标量样式,标签)。您可能希望编写一些包装器函数来简化节点创建。
https://stackoverflow.com/questions/68242948
复制相似问题