当前位置: 首页 > 知识库问答 >
问题:

JAXB马歇尔列表JSON?

严永丰
2023-03-14

我使用JAXB(MoXY)对XML和JSON中的数据进行编组/解编。

我有一个列表

@XmlRootElement(name = "carList")
public class CarsList {

    @XmlValue
    protected List<String> cars;

    public List<String> getCars() {
        if (cars == null) {
            cars = new ArrayList<String>();
        }
        return cars;
    }

    public void addCar(String carId) {
        if (cars == null) {
            cars = new ArrayList<String>();
        }
        if (carId != null) {
            this.cars.add(car);
        }
    }

    public void setCars(List<String> cars) {
        this.cars = cars;
    }
}

XML如预期般出现:

<prefix:carList xmlns:prefix="http://www....some prefix namespace...">car1 car2 car3</prefix:carList>

但是我得到的JSON是:

{
   "prefix:carList" :  "car1 car2 car3"
}

我的JSON marshaller属性:

marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);

但我希望我的JSON像:

{
   "prefix:carList" : [ "car1", "car2", "car3" ]
}

我是JAXB的新手。我需要做什么更改才能使JSON符合要求??我愿意修改我的域类CarsList

在列表元素上添加@xmlslist注释,也会添加其键名(cars),如下所示:

{
"prefix:carsList" : {
      "cars" : ["car1", "car2", "car3"]
}
}

这是不希望的。

感谢您的帮助。


共有1个答案

濮阳钟展
2023-03-14

我认为这个编组器设置应该可以解决您的问题:

marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
 类似资料:
  • 问题内容: 我正在使用JAXB marshaller创建和格式化我的.xml文件。除了一个地方,它运作良好。缩进缺少两个地方: .xml文件的其余部分看起来不错。我正在使用这种方法来美化整个代码: 不幸的是,它不适用于这两个元素。有任何想法吗? 问题答案: 可以通过将javax Transformer应用于输出来解决此烦人的问题。

  • 我的应用程序需要在Java和XML之间转换数据。 在转换数据时,我需要区分该值是否存在,该值是否显式设置为null,或者该值是否有值。 XML示例: 由于像“String”这样的Java类型只知道两种状态(null或notnull),所以我尝试使用Java选项来解决这个问题。 XML和Java选项之间的映射可以如下所示: 我尝试使用JAXB进行编组和解组。其思想是,只有当一个值需要显式地设置为一个

  • 我有一个从org.springframework.security.core.userdetails.user扩展而来的bean,并将这个bean与openid一起使用。bean看起来像: 控制器将Employee的实例接受为: @RequestMapping(值=“/addemp.do”,方法=RequestMethod.Post)public@ResponseBody String addEm

  • 我对使用jaxb进行编组有点陌生,我正在尝试从我的对象生成此xml: 我得到的是: 我想定义xsi: type... 我使用以下代码创建这些对象: 我必须创建一个JAXBElement,因为TypeProcesBerichtResultV2类没有用@RootElement注释,它是用jaxB maven插件生成的,所以我不能更改它。 然后我调用一个方法: 该方法的实施是: 我应该更改什么以封送到正

  • 1. 马尔科夫链概述 马尔科夫链定义本身比较简单,它假设某一时刻状态转移的概率只依赖于它的前一个状态。举个形象的比喻,假如每天的天气是一个状态的话,那个今天是不是晴天只依赖于昨天的天气,而和前天的天气没有任何关系。当然这么说可能有些武断,但是这样做可以大大简化模型的复杂度,因此马尔科夫链在很多时间序列模型中得到广泛的应用,比如循环神经网络RNN,隐式马尔科夫模型HMM等,当然MCMC也需要它。 如

  • 我有一个像这样的xsd- 当我使用XJC生成类绑定时,我看到教师是List类型的 如何生成字符串列表而不是对象?任何帮助都很感激。 更新:使用“vamsilp”提供的解决方案——在删除“教师”元素上的“minOccurs”后,它工作得很好!XSD是由泽西从以下代码自动生成的: 我不知道如何删除“minOccurs”属性。我是否需要修改代码以忽略它?