XML转JSON工具类(xml转json工具类)

一、介绍

XML和JSON是目前最流行的数据交换格式,可以互相转换。XML是一种标记语言,适合描述文本语义信息;而JSON是一种轻量级的数据交换格式,适合用于数据传输和存储。在开发过程中,我们常常需要将XML格式的数据转换成JSON格式,以便前端进行处理。

本篇文章主要介绍一个基于Java语言的XML转JSON工具类,可以方便地将XML格式的数据转换成JSON格式。

二、使用方法

本工具类主要包括两个方法:将XML字符串转换成JSONObject对象和将XML字符串转换成JSONArray对象。具体使用方法如下:

1.将XML字符串转换成JSONObject对象:

public static JSONObject xmlToJson(String xml) {
    JSONObject jsonObject = new JSONObject();
    try {
        Document document = DocumentHelper.parseText(xml);
        // 获取根节点
        Element root = document.getRootElement();
        // 将根节点的子节点转换成JSONObject对象
        jsonObject.put(root.getName(), iterateElement(root));
    } catch (DocumentException e) {
        e.printStackTrace();
    }
    return jsonObject;
}

private static JSONObject iterateElement(Element element) {
    JSONObject jsonObject = new JSONObject();
    // 获取当前节点的所有属性
    List attributeList = element.attributes();
    for (Attribute attribute : attributeList) {
        jsonObject.put("@" + attribute.getName(), attribute.getValue());
    }
    // 判断当前节点是否有子节点
    List elementList = element.elements();
    if (elementList.size() > 0) {
        for (Element subElement : elementList) {
            // 如果子节点是数组
            if (subElement.getName().equals(elementList.get(0).getName())) {
                JSONArray jsonArray = new JSONArray();
                for (Element e : elementList) {
                    jsonArray.add(iterateElement(e));
                }
                jsonObject.put(subElement.getName(), jsonArray);
            } else { // 如果不是数组
                jsonObject.put(subElement.getName(), iterateElement(subElement));
            }
        }
    } else { // 如果当前节点没有子节点
        jsonObject.put(element.getName(), element.getText());
    }
    return jsonObject;
}

2.将XML字符串转换成JSONArray对象:

public static JSONArray xmlToJsonArray(String xml, String rootName) {
    JSONArray jsonArray = new JSONArray();
    try {
        Document document = DocumentHelper.parseText(xml);
        // 获取根节点
        Element root = document.getRootElement();
        // 获取根节点下的子节点
        List elementList = root.elements();
        // 遍历子节点
        for (Element element : elementList) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put(rootName, iterateElement(element));
            jsonArray.add(jsonObject);
        }
    } catch (DocumentException e) {
        e.printStackTrace();
    }
    return jsonArray;
}

三、实例演示

下面以一个具体的例子来演示如何使用该工具类将XML格式的数据转换成JSON格式。

XML格式的数据如下:

String xml = "<root><person name='张三' gender='男'><age>20</age></person><person name='李四' gender='女'><age>25</age></person></root>";

将上述XML字符串转换成JSON对象:

JSONObject jsonObject = XmlJsonUtils.xmlToJson(xml);
System.out.println(jsonObject.toString());

转换结果如下:

{
  "root": {
    "person": [
      {
        "@name": "张三",
        "@gender": "男",
        "age": "20"
      },
      {
        "@name": "李四",
        "@gender": "女",
        "age": "25"
      }
    ]
  }
}

将上述XML字符串转换成JSON数组:

JSONArray jsonArray = XmlJsonUtils.xmlToJsonArray(xml, "person");
System.out.println(jsonArray.toString());

转换结果如下:

[
  {
    "person": {
      "@name": "张三",
      "@gender": "男",
      "age": "20"
    }
  },
  {
    "person": {
      "@name": "李四",
      "@gender": "女",
      "age": "25"
    }
  }
]

四、优缺点分析

1.优点:

(1)适用性广:本工具类可以将任意复杂度的XML字符串转换成对应的JSON格式;

(2)易于阅读:转换后的JSON格式便于阅读和使用,方便开发人员进行二次开发和处理;

(3)使用方便:本工具类只需要传入XML字符串和根节点名称(如果需要转换成JSON数组的话),即可完成XML到JSON的转换过程。

2.缺点:

(1)性能问题:由于本工具类使用递归实现节点的遍历,当XML文件太大时,可能会影响效率;

(2)依赖问题:本工具类内部依赖了JSONObject和JSONArray对象,需要引入相应的类库。

五、总结

本篇文章主要介绍了一个基于Java语言的XML转JSON工具类,可以方便地将XML格式的数据转换成JSON格式。该工具类具有适用性广、易于阅读和使用方便等优点,但在性能和依赖方面存在一定的缺点。在实际开发中,需要根据具体情况选择是否使用该工具类。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平