笔记:xml转json

最近需求中需要对xml进行json转换,查了部分资料,这里使用了dom4j进行json转换,json使用的是阿里的fastJson。

1、添加依赖



   org.dom4j
   dom4j
   2.1.3



   com.alibaba
   fastjson
   1.2.79

2、转换代码

public class Dom4j2Json {

    public static void main(String[] args) throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File("F:\\JavaProject\\MyPlugin\\src\\main\\resources\\logback-spring.xml"));
        JSONObject jsonObject = dom4j2Json(document.getRootElement());
        String pretty = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue
                , SerializerFeature.WriteDateUseDateFormat);
        System.out.println(pretty);

    }

    /**
     * ml转json
     * @param element
     * @return
     */
    private static JSONObject dom4j2Json(Element element){
        JSONObject supJson = new JSONObject();
        JSONObject json = new JSONObject();
        dom4j2Json(element, json);
        supJson.put(element.getName(), json);
        return supJson;
    }


    /**
     * 内层转json
     *
     * @param element
     * @param json
     */
    private static void dom4j2Json(Element element, JSONObject json) {
        //如果是属性
        for (Object o : element.attributes()) {
            Attribute attr = (Attribute)o;
            if (!isEmpty(attr.getValue())) {
                json.put("@" + attr.getName(), attr.getValue());
            }
        }
        List chdEl = element.elements();
        if (chdEl.isEmpty() && !isEmpty(element.getText())) {
            //如果没有子元素,只有一个值
            json.put(element.getName(), element.getText());
        }
        //有子元素
        for (Element e : chdEl) {
            //子元素也有子元素
            if (!e.elements().isEmpty()) {
                JSONObject chdjson = new JSONObject();
                dom4j2Json(e, chdjson);
                Object o = json.get(e.getName());
                if (o != null) {
                    JSONArray jsona = null;
                    //如果此元素已存在,则转为jsonArray
                    if (o instanceof JSONObject) {
                        JSONObject jsono = (JSONObject)o;
                        json.remove(e.getName());
                        jsona = new JSONArray();
                        jsona.add(jsono);
                        jsona.add(chdjson);
                    }
                    if (o instanceof JSONArray) {
                        jsona = (JSONArray)o;
                        jsona.add(chdjson);
                    }
                    json.put(e.getName(), jsona);
                } else {
                    if (!chdjson.isEmpty()) {
                        json.put(e.getName(), chdjson);
                    }
                }

            } else {//子元素没有子元素
                for (Object o : element.attributes()) {
                    Attribute attr = (Attribute)o;
                    if (!isEmpty(attr.getValue())) {
                        json.put("@" + attr.getName(), attr.getValue());
                    }
                }
                if (!e.getText().isEmpty()) {
                    json.put(e.getName(), e.getText());
                }
                //这里是最后一层且有属性
                if (e.getText().isEmpty() && !e.attributes().isEmpty()) {
                    Object oe = json.get(e.getName());
                    if (oe == null) {
                        JSONObject jsonObject = new JSONObject();
                        for (Object o : e.attributes()) {
                            Attribute attr = (Attribute)o;
                            if (!isEmpty(attr.getValue())) {
                                jsonObject.put("@" + attr.getName(), attr.getValue());
                            }
                        }
                        json.put(e.getName(), jsonObject);
                    } else {
                        JSONArray jsonArray = new JSONArray();
                        if (oe instanceof JSONObject) {
                            JSONObject oeJsonObject = (JSONObject)oe;
                            jsonArray.add(oeJsonObject);
                        }
                        if (oe instanceof JSONArray) {
                            jsonArray = (JSONArray)oe;
                        }
                        JSONObject jsonObject = new JSONObject();
                        for (Object o : e.attributes()) {
                            Attribute attr = (Attribute)o;
                            if (!isEmpty(attr.getValue())) {
                                jsonObject.put("@" + attr.getName(), attr.getValue());
                            }
                        }
                        jsonArray.add(jsonObject);
                        json.put(e.getName(), jsonArray);
                    }

                }
            }
        }

    }

    private static boolean isEmpty(String value) {
        return value == null || value.length() == 0 || "null".equals(value);
    }

}

你可能感兴趣的:(笔记:xml转json)