我有一些
XML格式的简单数据,我需要将其转换为
JSON,并且能够将
JSON转换回相同的XML字符串.但是我在使用现有的jackson(版本2.0.6)库时遇到了问题.
这是具有类似结构的XML数据的示例
<channels> <channel>A</channel> <channel>B</channel> <channel>C</channel> </channels>
为了能够将其转换回原始XML,我希望JSON看起来像这样
{ "channels": { "channel": [ "A","B","C" ] } }
然而杰克逊给了我
{"channel":"C"}
根元素名称不会被保留,而是创建通道数组,最后一个会覆盖以前的通道.
查看com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer的源代码,我发现该库不支持此功能,但允许覆盖和更改行为.
/** * Method called when there is a duplicate value for a field. * By default we don't care,and the last value is used. * Can be overridden to provide alternate handling,such as throwing * an exception,or choosing different strategy for combining values * or choosing which one to keep. * * @param fieldName Name of the field for which duplicate value was found * @param objectNode Object node that contains values * @param oldValue Value that existed for the object node before newValue * was added * @param newValue Newly added value just added to the object node */ protected void _handleDuplicateField(String fieldName,ObjectNode objectNode,JsonNode oldValue,JsonNode newValue) throws JsonProcessingException { // By default,we don't do anything ; }
所以我的问题是
- Has anyone written a custom deserializer to support this feature? Or is there another way to work around this.
- How do I preserve the root element name?
以下是一个测试示例
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.dataformat.xml.XmlMapper; public class Test { public static void main(String[] args) throws Exception { String xml="<channels><channel>A</channel><channel>B</channel><channel>C</channel></channels>"; XmlMapper xmlMapper = new XmlMapper(); JsonNode node=xmlMapper.readValue(xml,JsonNode.class); System.out.println(node.toString()); } }
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。