通过抛弃和JAXB将XML包装列表转换为JSON数组

通过抛弃和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模型转

我使用JAXB将带注释的对象封送到XML,格式如下:

  <channels>
     <channel>Test A</channel>
     <channel>Test B</channel>
  </channels>
我真的希望它整理成以下形式:

  "channels" : {
    {"Test A"}, {"Test B"}
  },

我该怎么做?这是正确的做法吗?

最简单的方法可能是将JAXB模型转换为经过调整的JSON模型

然后你会做:

  • 实例化JAXB模型
  • 将其转换为JSON模型
  • 封送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>