【发布时间】:2019-10-16 12:00:24
【问题描述】:
我正在尝试设置代码以使用杰克逊创建一个节点树,然后可以使用它来编写 JSON 或 XML。我可以让 JSON 工作,但我希望它也能以这种方式输出 XML。
我的示例树如下所示:
XmlMapper NodeMap = new XmlMapper();
ObjectNode rootNode = NodeMap.createObjectNode();
ObjectNode currentNode = rootNode.putObject("Examples");
currentNode
.put("Puppy", TRUE)
.put("Apple", 2)
.put("Jet", "Li");
currentNode = rootNode.putObject("Single");
currentNode.put("One", 1);
使用这棵树我可以使用
String xml = rootNode.toString();
得到
{"Examples":{"Puppy":true,"Apple":2,"Jet":"Li"},"Single":{"One":1}}
这表明树已正确构建,但我一直希望它会输出 XML,因为我将树附加到 XmlMapper。不幸的是,仅此一点似乎还不够。
我知道我可以拿另一个物体做类似的事情
XmlMapper XMap = new XmlMapper();
XMap.writeValue(new File(writePath), objectToBeConverted);
要获取 XML,但我希望使用上面的节点树,而 .writevalue 似乎不适用于节点。
如何将上述树和输出(到字符串或文件)作为 XML?这种方法有可能还是我不走运?
编辑:我使用的是 Jackson 版本 2.9.2
EDIT2:事实证明我有多个版本的杰克逊重叠,正如 andrii 在他的回答下的 cmets 中提到的那样。
【问题讨论】:
-
在本教程中应该是 #6,但您的代码看起来不错。 baeldung.com/jackson-xml-serialization-and-deserialization
-
".writevalue 似乎不适用于节点。"运行代码时会发生什么?你有错误吗?如果是这样,错误是什么?
-
@Code-Apprentice 我得到一个编译错误:java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonGenerator.writeStartObject(Ljava/lang/Object;)V at com.fasterxml.jackson .databind.node.ObjectNode.serialize(ObjectNode.java:290)
-
@Alexander 请edit您的问题包含完整的错误消息和堆栈跟踪。
-
另外,
objectToBeConverted是什么?你的意思是rootNode?