Java 用Jackson写yaml?
我正在使用Jackson读取和修改yaml文件。效果很好。不过,我找不到写yaml所需的魔法咒语Java 用Jackson写yaml?,java,json,jackson,yaml,Java,Json,Jackson,Yaml,我正在使用Jackson读取和修改yaml文件。效果很好。不过,我找不到写yaml所需的魔法咒语 ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); ObjectNode root = (ObjectNode)mapper.readTree(yamlFileIn); // modify root here mapper.writeValue(yamlFileOut, root); // writes json, not yaml.
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
ObjectNode root = (ObjectNode)mapper.readTree(yamlFileIn);
// modify root here
mapper.writeValue(yamlFileOut, root); // writes json, not yaml. not sure why.
我相信这是作家、JsonGenerators和其他一些东西的结合。有人得到示例代码吗?试试:
YAMLFactory yf = new YAMLFactory();
ObjectMapper mapper = new ObjectMapper(yf);
ObjectNode root = (ObjectNode) mapper.readTree(yamlFileIn);
// modify root here
FileOutputStream fos = new FileOutputStream(yamlFileOut);
yf.createGenerator(fos).writeObject(root); // works. yay.
对于v2.8.3,以下各项应适用:
YAMLFactory yf = new YAMLFactory();
ObjectMapper mapper = new ObjectMapper(yf);
ObjectNode root = (ObjectNode) mapper.readTree(yamlFileIn);
// modify root here
FileOutputStream fos = new FileOutputStream(yamlFileOut);
SequenceWriter sw = mapper.writerWithDefaultPrettyPrinter().writeValues(fos);
sw.write(root);
如图所示的代码应该可以工作——可能有bug。确保使用最新版本(2.4.4)。
YAMLFactory
可能缺少某些覆盖,导致意外使用JSON生成器。FWIW,2.1.3中修复的问题12()可能已描述。请注意,对于v2.8.3,此答案可能会产生异常没有为生成器定义ObjectCodec
。使用映射器写入值似乎是首选解决方案。@dave jarvis关于v2.8.3的说法是正确的。这将产生“没有为生成器定义ObjectCodec…”异常。@DaveJarvis gilbertpilz上面的回答有解决方法:是的,这适用于Jackson的最新版本。另一个没有。它的优越性在于,如果您也在读取文件,则可以重用已经配置的mapper/yamlfactory。