美文网首页
笔记:xml转json

笔记:xml转json

作者: IFLEU | 来源:发表于2022-05-24 22:08 被阅读0次

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

1、添加依赖

<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<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.79</version>
</dependency>

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<Element> 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

      本文链接:https://www.haomeiwen.com/subject/mgysprtx.html