在java中从xml转换为json时处理单个元素的出现

时间:2016-01-05 19:50:51

标签: java json xml

我必须使用java将xml字符串转换为json对象,这是一个非常常见的要求,我使用下面的代码非常精细

content = "<books>
               <science>
                 <name>volcano</name>
               </science>
               <science>
                 <name>gravity</name>
               </science>
           </books>"
JSONObject xmlJSONObj = XML.toJSONObject(content);
String jsonPrintString = xmlJSONObj.toString();
System.out.println(jsonPrintString);

输出如下:

{
"books": {
"science": [
  { "name": "volcano" },
  { "name": "gravity" }
]
}
}

现在假设我的输入内容字符串类似于下面的

<books>
   <science>
     <name>volcano</name>
   </science>
</books>

我仍然需要输出

{
 "books": {
 "science" : [
    { "name" : "volcano" }
  ]
 }
 }

其中元素科学仍然表示为列表,因为我需要将此json作为输入提供给需要元素科学作为列表的工具,如果输出为

{
 "books": {
  "science": { "name": "volcano" }
 }
 } 

它失败了,因为科学不是一个清单。请给我一些提示。提前致谢。

1 个答案:

答案 0 :(得分:0)

这不是Java问题,而是XML问题。仅仅根据输入的XML数据,转换器无法确定“科学”是否与科学相关。 element是单个或多个值。上面的代码没有错。它只是没有足够的信息,因此做了错误的假设。所需要的是这些文件结构的定义。 DTD或XML架构定义。一旦有了这样的定义,您甚至可以使用更复杂的方法(如JAXB)来正确解析XML。序列化为JSON将是一件小事。