XML通过Jettison和JAXB将列表包装到JSON数组
发布时间:2020-12-16 23:36:17 所属栏目:百科 来源:网络整理
导读:我正在使用JAXB以一种形式将带注释的对象编组为 XML: channels channelTest A/channel channelTest B/channel /channels 我想使用JAXB(ala http://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html)将其编组为JSON,但它会对以下内容进行编组: "
我正在使用JAXB以一种形式将带注释的对象编组为
XML:
<channels> <channel>Test A</channel> <channel>Test B</channel> </channels> 我想使用JAXB(ala http://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html)将其编组为JSON,但它会对以下内容进行编组: "channels" : { "channel" : [ "Test A","Test B" ] }, 我真的希望它能够编组成以下形式: "channels" : { {"Test A"},{"Test B"} }, 我怎样才能做到这一点?这是正确的做法吗? 解决方法
注意:我是
EclipseLink JAXB (MOXy)领导者,也是
JAXB 2 (JSR-222)专家组的成员.
下面是使用EclipseLink JAXB(MOXy)中的JSON绑定来支持此用例的方法. Java模型(根) 下面是我将用于此示例的Java模型. import java.util.*; import javax.xml.bind.annotation.*; @XmlRootElement public class Root { private List<String> channels = new ArrayList<String>(); @XmlElementWrapper @XmlElement(name="channel") public List<String> getChannels() { return channels; } } 将MOXy指定为JAXB提供程序(jaxb.properties) 要将MOXy指定为JAXB提供程序,您需要在与域模型相同的包中包含一个名为jaxb.properties的文件,并带有以下条目(请参阅:): javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 演示代码 在下面的演示代码中,我们将同一个实例输出到XML和JSON. import javax.xml.bind.*; import org.eclipse.persistence.jaxb.MarshallerProperties; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); Root root = new Root(); root.getChannels().add("Test A"); root.getChannels().add("Test B"); // Output XML marshaller.marshal(root,System.out); // Output JSON marshaller.setProperty(MarshallerProperties.MEDIA_TYPE,"application/json"); marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT,false); marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME,true); marshaller.marshal(root,System.out); } } 产量 以下是运行演示代码的输出: <?xml version="1.0" encoding="UTF-8"?> <root> <channels> <channel>Test A</channel> <channel>Test B</channel> </channels> </root> { "channels" : [ "Test A","Test B" ] } 欲获得更多信息 > http://blog.bdoughan.com/2013/03/binding-to-json-xml-handling-collections.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |