通过抛弃和JAXB将XML包装列表转换为JSON数组
我使用JAXB将带注释的对象封送到XML,格式如下:通过抛弃和JAXB将XML包装列表转换为JSON数组,xml,json,jaxb,jettison,Xml,Json,Jaxb,Jettison,我使用JAXB将带注释的对象封送到XML,格式如下: <channels> <channel>Test A</channel> <channel>Test B</channel> </channels> 我真的希望它整理成以下形式: "channels" : { {"Test A"}, {"Test B"} }, 我该怎么做?这是正确的做法吗?最简单的方法可能是将JAXB模型转
<channels>
<channel>Test A</channel>
<channel>Test B</channel>
</channels>
我真的希望它整理成以下形式:
"channels" : {
{"Test A"}, {"Test B"}
},
我该怎么做?这是正确的做法吗?最简单的方法可能是将JAXB模型转换为经过调整的JSON模型 然后你会做:
根据您实例化JAXB模型的方式,您可能希望直接实例化JSON模型。注意:我是该专家组的负责人和成员 下面是如何使用EclipseLink JAXB(MOXy)中的JSON绑定来支持此用例 Java模型(根) 下面是我将用于此示例的Java模型
import java.util.*;
导入javax.xml.bind.annotation.*;
@XmlRootElement
公共类根{
私有列表通道=新的ArrayList();
@XmlElementWrapper
@xmlement(name=“channel”)
公共列表getChannels(){
返回通道;
}
}
指定MOXy作为JAXB提供程序(JAXB.properties)
要将MOXy指定为JAXB提供程序,您需要在与域模型相同的包中包含一个名为JAXB.properties
的文件,其中包含以下条目(请参见:):
演示代码
在下面的演示代码中,我们将向XML和JSON输出相同的实例
import javax.xml.bind.*;
导入org.eclipse.persistence.jaxb.MarshallerProperties;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Root.class);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
根=新根();
root.getChannels().add(“测试A”);
root.getChannels().add(“测试B”);
//输出XML
marshaller.marshall(root,System.out);
//输出JSON
setProperty(MarshallerProperties.MEDIA_类型,“application/json”);
setProperty(MarshallerProperties.JSON_INCLUDE_ROOT,false);
setProperty(MarshallerProperties.JSON_包装器_作为_数组_名称,true);
marshaller.marshall(root,System.out);
}
}
输出
下面是运行演示代码的输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<channels>
<channel>Test A</channel>
<channel>Test B</channel>
</channels>
</root>
了解更多信息
“通道”:[“测试a”,“测试B”]
?
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
<?xml version="1.0" encoding="UTF-8"?>
<root>
<channels>
<channel>Test A</channel>
<channel>Test B</channel>
</channels>
</root>