java - 将对象集合序列化为 JSON 和 XML

标签 java xml json web-services jaxb

我有一个简单的 Web 服务,它使用和生成一些 XML 和 JSON 格式的 bean。然后我有一个包含对象集合的 bean:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {

  @XmlElementWrapper(name = "addresses")
  @XmlElement(name = "address")
  private Collection<Address> addresses;
  ...
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Address{
  private String street;
  private String city;
  private String country;
  ...
}

序列化后我有这个 XML:

<company>
 <addresses>
   <address>
      <street>Testowa 1A</street>
      <city>Warszawa</city>
      <country>Polska</country>
   </address>
   <address>
      <street>Testowa 2A</street>
      <city>Warszawa</city>
      <country>Polska</country>
   </address>
 </addresses>
</company>

哪个是正确的,JSON:

"company" : {
  "addresses": {
     "address": [ {"street": "Testowa 1A", "city": "Warszawa", "country": "Polska"} ],
     "address": [ {"street": "Testowa 2A", "city": "Warszawa", "country": "Polska"} ]
  }
}

问题出在 JSON 上。我的网络服务用户无法接受序列化集合的符号。他们需要这样的东西:

"company" : {
  "addresses": [
     {"street": "Testowa 1A", "city": "Warszawa", "country": "Polska"},
     {"street": "Testowa 2A", "city": "Warszawa", "country": "Polska"}
  ]
}

如果我删除 @XmlElementWrapper 我将拥有我需要的 JSON,但我的 XML 将不正确(没有“地址”标签):

<company>
  <address>
     <street>Testowa 1A</street>
     <city>Warszawa</city>
     <country>Polska</country>
  </address>
  <address>
    <street>Testowa 2A</street>
     <city>Warszawa</city>
     <country>Polska</country>
  </address>
</company>

知道如何满足这两个要求吗?

最佳答案

JAXB (JSR-222)本身不包括如何将对象转换为 JSON 或从 JSON 转换为对象。这意味着答案将取决于您正在使用的当前解释 JAXB 注释的 JSON 绑定(bind)实现。

EclipseLink JAXB (MOXy)我们提供 JSON 绑定(bind)一个名为 JSON_WRAPPER_AS_ARRAY_NAME 的运行时属性,它可以实现您正在寻找的行为。

关于java - 将对象集合序列化为 JSON 和 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24865758/

相关文章:

java - 获取由数组定义的动态多个集合的笛卡尔积

python - 填充预定义的 pandas 数据框

json - 匹配行选择传递数据

java - 如何将图像保存为 RTF 格式的文件?

java - 阻塞对象属性

java - 使用计时器自动关闭 JOptionPane.showconfirmDialog

c# - XPath 在使用 DataContractSerializer 创建的 xml 中不起作用

xml - 如何比较 XML 文件

c++ - 这是什么 (0x01000000) 以及如何存储它?

objective-c - 如何在Objective-C的JSON中创建真/假