Java XML與JSON轉換

整理了以下兩個實現形式:

方式一:

  • 把maven包引用好
 <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.7</version>
        </dependency>
public static String toXml(String json){
        String xml = JSONUtil.toXmlStr( JSONUtil.parse(json));
        StringBuilder sb = new StringBuilder();
        sb.append("<root>");
        sb.append(xml);
        sb.append("</root>");
        return sb.toString();
    }

public static String toJson(String xml){
        return JSONUtil.parseFromXml(xml).toString();
}

方式二:

  • 把maven包引用好
<!-- https://mvnrepository.com/artifact/org.jdom/jdom2 -->
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom2</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

XmlAndJson.java

import net.sf.json.JSONArray;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;
import net.sf.json.JSONObject;


import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;




public class XmlAndJson {

    private static Map<String, Object> getAttributes(Element element) {
        Map<String, Object> result = new HashMap<>();
        List<Attribute> attrList = element.getAttributes();
        for (Attribute attr : attrList) {
            result.put(attr.getName(), attr.getValue());
        }
        return result;
    }

    private static Map<String, Object> iterateElement(Element element) {
        Map<String, Object> result = new HashMap<>();
        if (!element.getText().isEmpty() || !"".equals(element.getText().intern())) {
            result.put(element.getName(), element.getValue());
            return result;
        }
        List<Attribute> attrList = element.getAttributes();
        for (Attribute attr : attrList) {
            result.put(attr.getName(), attr.getValue());
        }

        //如果子集不爲空,則迭代
        List<Element> children = element.getChildren();
        if (!children.isEmpty()) {
            Map<String, List<Map<String, Object>>> temp = new HashMap<>();
            for (Element child : children) {
                if (element.getChildren(child.getName()).size() > 1) {
                    List<Map<String, Object>> te = temp.get(child.getName());
                    Map<String, Object> childMap = new HashMap<>();
                    childMap.put(child.getName(), iterateElement(child));

                    if (te != null && !te.isEmpty()) {
                        te.add(childMap);
                    } else {
                        te = new ArrayList<>();
                        te.add(childMap);
                        temp.put(child.getName(), te);
                    }
                } else {
                    if (child.getChildren().isEmpty()) {
                        if (!child.getAttributes().isEmpty()) {
                            List<Attribute> cattrList = child.getAttributes();
                            Map<String, Object> childMap = new HashMap<>();
                            for (Attribute attr : cattrList) {
                                childMap.put(attr.getName(), attr.getValue());
                            }
                            result.put(child.getName(), childMap);
                        } else {
                            result.put(child.getName(), child.getValue());
                        }
                    } else {
                        result.put(child.getName(), iterateElement(child));
                    }
                }

            }
            for (String key : temp.keySet()) {
                List<Map<String, Object>> cList = new ArrayList<>();
                for (Map<String, Object> obj : temp.get(key)) {
                    cList.add((Map<String, Object>) obj.get(key));
                }
                result.put(key, cList);
            }

        }

        return result;
    }

    /**
     * 轉換一個xml格式的字符串到json格式
     *
     * @param xml xml格式的字符串
     * @return 成功返回json 格式的字符串;失敗反回null
     */

    public static String xmlToJson(String xml) {
        JSONObject obj = new JSONObject();
        try {
            InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(is);
            Element root = doc.getRootElement();
            obj.put(root.getName(), iterateElement(root));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return obj.toString();
    }

    /**
     * 轉換一個json格式的字符串到xml格式
     *
     * @param jsonstr json格式的字符串
     * @return 成功返回xml 格式的字符串;失敗反回null
     */
    public static String jsonToXml(String jsonstr) {
        if (jsonstr == null) {
            return null;
        } else {
            JSONObject json = JSONObject.fromObject(jsonstr);
            Element elements = new Element("root");
            getXMLFromObject(json, "root", elements);
            XMLOutputter xmlOut = new XMLOutputter();
            return xmlOut.outputString(elements);
        }
    }

    private static void getXMLFromObject(Object obj, String tag, Element parent) {
        if (obj == null) {
            return;
        }
        Element child;
        String eleStr;
        Object childValue;
        if (obj instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) obj;
            for (Object temp : jsonObject.keySet()) {
                eleStr = temp.toString();
                childValue = jsonObject.get(temp);
                child = new Element(eleStr);
                if (childValue instanceof JSONArray) {
                    getXMLFromObject(childValue, eleStr, parent);
                } else {
                    parent.addContent(child);
                    getXMLFromObject(childValue, eleStr, child);
                }
            }
        } else if (obj instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) obj;
            for (int i = 0; i < jsonArray.size(); i++) {
                childValue = jsonArray.get(i);
                child = new Element(tag);
                parent.addContent(child);
                getXMLFromObject(childValue, tag, child);
            }
        } else if (obj instanceof Date) {
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            parent.setText(sf.format((Date) obj));
        } else {
            parent.setText(obj.toString());
        }
    }
}

調用示例

String orgjson =  "{\n" +
                "    \"明細\":[\n" +
                "        { \n" +
                "            \"編號\":\"01030021\",\n" +
                "            \"名稱\":\"CPU\"  \n" +
                "        },\n" +
                "        {\n" +
                "            \n" +
                "            \"編號\":\"01030022\",\n" +
                "            \"名稱\":\"工作站\" \n" +
                "        }\n" +
                "    ]\n" +
                "}";
System.out.println("#####################原始json串#####################");
        System.out.println(orgjson);
        System.out.println("#####################方法一#####################");

        System.out.println("##################### json => xml #####################");
        //方法1
        String xml =  toXml(orgjson);
        System.out.println(xml);

        System.out.println("##################### xml =>  json#####################");
        //to json 方法1
        String json = toJson(xml);
        System.out.println(json);

        System.out.println("#####################方法二#####################");
        //方法2
        System.out.println("##################### json => xml #####################");
        String xml2 =  XmlAndJson.jsonToXml(orgjson);
        System.out.println(xml2);

        System.out.println("##################### xml =>  json#####################");
        String json2 = toJson(xml2);
        System.out.println(json2);

文檔:

  1. https://blog.csdn.net/beiqiaofeng123/article/details/115586278
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章