gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:37 26 4
gpt4 key购买 nike

我正在使用 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 绑定(bind)来支持此用例。

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" ]
}

了解更多信息

关于通过 Jettison 和 JAXB 将 XML 包装列表转换为 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com