Java工具类:将xml转为Json


一、场景

在对接第三方接口时,由于接口返回的并不是常见的Json,而是XML,所以需要将XML转为Json,方便后续处理


二、工具类

package com.xxx.util;

import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.ByteArrayInputStream;
import java.util.List;

/**
 * @author hcs
 * 
 * @date 2024/1/19 10:55
 */
public class XmlConverToJsonUtil {

    /**
     * 将xml转为json
     * 
     * @param xml
     * @return
     */
    public static com.alibaba.fastjson.JSONObject xmlConversionToJSON(String xml) {
        System.out.println("要转换的XML:\n" + xml);

        if (StringUtils.isBlank(xml)) {
            return null;
        }

        Document document = null;
        Element root = null;
        List<Element> elementList = null;
        List<Element> parantList = null;
        List<Element> childList = null;
        SAXReader reader = null;

        try {
            reader = new SAXReader();
            try {
                document = reader.read(new ByteArrayInputStream(xml.getBytes(Constant.default_encoding)));
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }

            root = document.getRootElement();
            elementList = root.elements();

            com.alibaba.fastjson.JSONObject map = new com.alibaba.fastjson.JSONObject();

            for (Element e : elementList) {
                String strName = e.getName();
                //map.put(strName, e.getText());
                map.put(strName, getElementValue(e, new com.alibaba.fastjson.JSONObject()));
            }
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            document = null;
            root = null;
            if (elementList != null) {
                elementList.clear();
            }
            elementList = null;
            if (parantList != null) {

                parantList.clear();
            }
            parantList = null;
            if (childList != null) {
                childList.clear();
            }
            childList = null;
            reader = null;
        }
        return null;
    }

    /**
     * 遍历,获取元素值
     * 
     * @param e
     * @param map
     * @return
     */
    private static Object getElementValue(Element e, com.alibaba.fastjson.JSONObject map){
        List<Element> elements = e.elements();
        if (elements == null || elements.size() < 1) {
            return e.getText();
        } else {
            for (Element element : elements) {
                List elements2 = element.elements();
                if (elements2 == null || elements2.size() < 1) {
                    map.put(element.getName(), element.getText());
                } else {
                    map.put(element.getName(), getElementValue(element, new com.alibaba.fastjson.JSONObject()));
                }
            }
            return map;
        }
    }
}


三、测试类

package com.xxx;

import com.xxx.util.XmlConverToJsonUtil;

public class XmlTest {
    public static void main(String[] args) {
        String xmlStr = "<USER_INFO>\n" +
                "\t<NAME>张三</NAME>\n" +
                "\t<COMPANY>XXX股份有限公司</COMPANY>\n" +
                "\t<AUDIT_STATUS>3</AUDIT_STATUS>\n" +
                "\t<REGISTRANT>张三</REGISTRANT>\n" +
                "\t<PHONE_NUMBER>12345678901</PHONE_NUMBER>\n" +
                "\t<MAILBOX></MAILBOX>\n" +
                "\t<USER_GUID>eee-ddd-ccc-bbb-aaa</USER_GUID>\n" +
                "\t<SOURCE_APP_CODE>AAA</SOURCE_APP_CODE\n" +
                "\t><EXPERT_GRADE></EXPERT_GRADE>\n" +
                "</USER_INFO>";

        System.out.println("\n转为JSON对象:\n" + XmlConverToJsonUtil.xmlConversionToJSON(xmlStr));
    }
}


四、测试结果

在这里插入图片描述

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java中,可以使用dom4j和fastjson库来实现XMLJSON的功能。具体步骤如下: 1.使用dom4j解析XML文件,将其换为Document对象。 ```java SAXReader reader = new SAXReader(); Document document = reader.read(new File("example.xml")); ``` 2.使用XPath表达式选择需要换的节点,并将其换为JSON对象。 ```java JSONObject jsonObject = new JSONObject(); Element root = document.getRootElement(); List<Element> elements = root.selectNodes("//book"); for (Element element : elements) { JSONObject bookObject = new JSONObject(); bookObject.put("id", element.attributeValue("id")); bookObject.put("name", element.elementText("name")); bookObject.put("author", element.elementText("author")); bookObject.put("price", element.elementText("price")); jsonObject.put(element.attributeValue("id"), bookObject); } ``` 3.使用fastjsonJSON对象换为JSON字符串。 ```java String jsonString = JSON.toJSONString(jsonObject); ``` 完整代码如下: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.util.List; public class XmlToJsonUtil { public static String xmlToJson(String xmlFilePath) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File(xmlFilePath)); JSONObject jsonObject = new JSONObject(); Element root = document.getRootElement(); List<Element> elements = root.selectNodes("//book"); for (Element element : elements) { JSONObject bookObject = new JSONObject(); bookObject.put("id", element.attributeValue("id")); bookObject.put("name", element.elementText("name")); bookObject.put("author", element.elementText("author")); bookObject.put("price", element.elementText("price")); jsonObject.put(element.attributeValue("id"), bookObject); } return JSON.toJSONString(jsonObject); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值