java json与xml互转工具类

丌官博文
2023-12-01

部分代码参考:https://blog.csdn.net/CDWLX/article/details/119038509
工具类

public class XmlMutualConversionJsonUtil {


    /**
     * 测试的main方法
     */
    public static void main(String[] args) throws Exception {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                + "<root>"
                + " <mdcardno>查询卡号</mdcardno>"
                + " <count>返回明细条数</count>"
                + " <rd1>"
                + " <test>"
                + "     <trxzone>交易地区号1</trxzone>"
                + "     <trxcurr>交易币种1</trxcurr>"
                + " </test>"
                + " </rd1>"
                + " <rd>"
                + "     <trxzone>交易地区号2</trxzone>"
                + "     <trxcurr>交易币种2</trxcurr>"
                + " </rd>"
                + " <rd>"
                + "     <trxzone>交易地区号3</trxzone>"
                + "     <trxcurr>交易币种3</trxcurr>"
                + "</rd>"
                + "</root>";
        JSONObject jsonObject =toJson(xml);
        System.out.println(jsonObject);
        System.out.println("----------------");
        Element root=new BaseElement("root");
        Element element = toXml(jsonObject.toJSONString(), root);
        System.out.println(element.asXML());
    }

    public  static  JSONObject  toJson(String xml){
        JSONObject jsonObject = new JSONObject();
        Document document = null;
        try {
            document = DocumentHelper.parseText(xml);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //获取根节点元素对象
        Element root = document.getRootElement();
        return xmlToJson(root,jsonObject);
    }

    public static JSONObject  xmlToJson(Element node,JSONObject json){
        //获取子节点list
        List<Element> list = node.elements();
        //获取节点名字
        String name = node.getName();
        //最下面的一层
        if(list.isEmpty()){
            String nodeValue = node.getTextTrim();
            json.put(name, nodeValue);
        }else{
            //下级节点进行嵌套
            JSONObject js = new JSONObject();
            //判断json数据中是否存在相同的 key
            //存在相同的key需要使用数组存储
            if(json.containsKey(name)){
                JSONArray jsonArray = null;
                Object o = json.get(name);
                if(o instanceof JSONArray){
                    jsonArray=(JSONArray) o;
                }else{
                    jsonArray = new JSONArray();
                    jsonArray.add(o);
                }
                json.put(name,jsonArray);
                jsonArray.add(js);
            }else {
                json.put(name,js);
            }
            //递归
            for (Element element : list) {
                xmlToJson(element,js);
            }

        }
        return json;
    }

    /**
     * 将json字符串转换成xml
     *
     * @param json
     *            json字符串
     * @throws Exception
     */
    public static Element toXml(String json,Element root) {
        JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
        Element ee = jsonToXml(jsonObject, root, null);
        return ee.elements().get(0);
    }

    /**
     * 将json字符串转换成xml
     *
     * @param jsonElement
     *            待解析json对象元素
     * @param parentElement
     *            上一层xml的dom对象
     * @param name
     *            父节点
     */
    public static Element jsonToXml(JsonElement jsonElement, Element parentElement, String name) {
        if (jsonElement instanceof JsonArray) {
            //是json数据,需继续解析
            JsonArray sonJsonArray = (JsonArray)jsonElement;
            for (int i = 0; i < sonJsonArray.size(); i++) {
                JsonElement arrayElement = sonJsonArray.get(i);
                jsonToXml(arrayElement, parentElement, name);
            }
        }else if (jsonElement instanceof JsonObject) {
            //说明是一个json对象字符串,需要继续解析
            JsonObject sonJsonObject = (JsonObject) jsonElement;
            Element currentElement = null;
            if (name != null) {
                currentElement = parentElement.addElement(name);
            }
            Set<Map.Entry<String, JsonElement>> set = sonJsonObject.entrySet();
            for (Map.Entry<String, JsonElement> s : set) {
                jsonToXml(s.getValue(), currentElement != null ? currentElement : parentElement, s.getKey());
            }
        } else {
            //说明是一个键值对的key,可以作为节点插入了
            Element el = parentElement.addElement(name);
            el.addText(jsonElement.getAsString());
        }
        return parentElement;
    }

}

依赖 jar包

  <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
 类似资料: