我正在使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。