XmlToJson.java 12.7 KB
package com.bsth.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.*;

import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.List;

public class XmlToJson {
    public static void main(String[] args) throws Exception {
//        String xmlStr= readFile("D:/ADA/et/Issue_20130506_back.xml");
//        Document doc= DocumentHelper.parseText(xmlStr);
//        JSONObject json=new JSONObject();
//        dom4j2Json(doc.getRootElement(),json);
//        System.out.println("xml2Json:"+json.toJSONString());
        String a = "[{'s':'sd','b':'sd'},{'s':'11','b':'22'}]";

        System.out.println(a.toString());
        String b = "{lhjcData={tabledata=[[{zdmc=组织机构代码, zd=TYSBM, zdmcdata=630301035}, {zdmc=对象名称, zd=DXMC, zdmcdata=测试公司1}, {zdmc=备忘录ID, zd=BWLID, zdmcdata=e4e4e4b15c3346ff015c336517a80043}, {zdmc=备忘录名称, zd=BWLMC, zdmcdata=对失信被执行人实施联合惩戒的合作备忘录}, {zdmc=行为事项, zd=XWSX, zdmcdata=最高人民法院公布的失信被执行人}, {zdmc=奖惩类型编码, zd=JCLX, zdmcdata=20}, {zdmc=奖惩类型名称, zd=JCLXMC, zdmcdata=惩戒}, {zdmc=判决法院, zd=PJFY, zdmcdata=上海市宝山区人民法院}, {zdmc=文书号, zd=WSH, zdmcdata=(2016)沪0113民初02817号}, {zdmc=立案日期, zd=LARQ, zdmcdata=2017/08/11}]], tablename=奖惩对象信息}, enterpriseData={resultGLL=null, resultDJL=[{tabledata=[[{zdmc=法定代表人, zdmcdata=TIMOTHY BRIAN CONSIDINE, zd=principalname}, {zdmc=工商注册号, zdmcdata=310000400595922, zd=regno}, {zdmc=法人类型, zdmcdata=公司, zd=organtype}, {zdmc=成立日期, zdmcdata=2009-03-30, zd=approvedate}, {zdmc=经营范围, zdmcdata=家具、金属制品、木工制品、亚克力制品的批发、进出口,并提供相关配套服务。 【依法须经批准的项目,经相关部门批准后方可开展经营活动】, zd=tradescope}, {zdmc=组织机构代码, zdmcdata=685514951, zd=organcode}, {zdmc=注册地址, zdmcdata=上海市静安区南京西路920号南泰大厦16A楼11室, zd=address}, {zdmc=法人名称, zdmcdata=测试公司1, zd=organname}, {zdmc=注册资金(万), zdmcdata=14, zd=regcapital}, {zdmc=币种, zdmcdata=美元, zd=currencytype}, {zdmc=登记状态, zdmcdata=确立, zd=organstatus}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商局, zd=XXSSDW}]], tablename=企业登记信息}, {tabledata=[[{zdmc=个人独资企业出资方式, zdmcdata=, zd=invest_type_id}, {zdmc=证照类型, zdmcdata=, zd=cert_type}, {zdmc=合伙人国别(地区)(外资), zdmcdata=英国, zd=nationality_id}, {zdmc=投资人名称, zdmcdata=CARDINAL PROJECT MANAGEMENT LIMITED, zd=investor_name}, {zdmc=证照编号, zdmcdata=, zd=cert_number}, {zdmc=投资人类型, zdmcdata=外国(地区)企业, zd=investor_type_gb}, {zdmc=合伙人住所(外资), zdmcdata=, zd=address}, {zdmc=合伙人承担责任方式(外资), zdmcdata=, zd=respond_way}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}]], tablename=出资信息}, {tabledata=[[{zdmc=姓名, zdmcdata=TIMOTHY BRIAN CONSIDINE, zd=person_name}, {zdmc=职务, zdmcdata=执行董事, zd=hdsh_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=姓名, zdmcdata=陈漪, zd=person_name}, {zdmc=职务, zdmcdata=总经理, zd=hdsh_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=姓名, zdmcdata=MARK SIMPSON, zd=person_name}, {zdmc=职务, zdmcdata=监事, zd=hdsh_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}]], tablename=主要成员信息}, {tabledata=[[{zdmc=变更前内容, zdmcdata=0.0000万美元, zd=before_content}, {zdmc=变更后内容, zdmcdata=2.8000万美元, zd=after_content}, {zdmc=变更日期, zdmcdata=20090702, zd=change_date}, {zdmc=变更事项, zdmcdata=实收资本变更, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=2.8000万美元, zd=before_content}, {zdmc=变更后内容, zdmcdata=7.0000万美元, zd=after_content}, {zdmc=变更日期, zdmcdata=20091111, zd=change_date}, {zdmc=变更事项, zdmcdata=实收资本变更, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=CARDINAL PROJECT MANAGEMENT LIMITED 2009-09-24 货币4.2000万美元;CARDINAL PROJECT MANAGEMENT LIMITED 2009-06-15 货币2.8000万美元, zd=before_content}, {zdmc=变更后内容, zdmcdata=CARDINAL PROJECT MANAGEMENT LIMITED 2009-09-24 货币4.2000万美元;CARDINAL PROJECT MANAGEMENT LIMITED 2009-06-15 货币2.8000万美元;CARDINAL PROJECT MANAGEMENT LIMITED 2010-05-31 货币0.4500万美元;CARDINAL PROJECT MANAGEMENT LIMITED 2011-02-09 货币6.5500万美元, zd=after_content}, {zdmc=变更日期, zdmcdata=20110523, zd=change_date}, {zdmc=变更事项, zdmcdata=实收资本变更, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=无, zd=before_content}, {zdmc=变更后内容, zdmcdata=陈漪, zd=after_content}, {zdmc=变更日期, zdmcdata=20171206, zd=change_date}, {zdmc=变更事项, zdmcdata=经理备案, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=MICHAEL ANDREW BARNARD, zd=before_content}, {zdmc=变更后内容, zdmcdata=MARK SIMPSON, zd=after_content}, {zdmc=变更日期, zdmcdata=20171206, zd=change_date}, {zdmc=变更事项, zdmcdata=监事备案, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=家具、货柜架、收银台、电器设备的批发、进出口,并提供相关设计咨询和配套服务(不涉及国营贸易管理商品,涉及配额、许可证管理商品的,按国家有关规定办理申请)。 【依法须经批准的项目,经相关部门批准后方可开展经营活动】, zd=before_content}, {zdmc=变更后内容, zdmcdata=家具、金属制品、木工制品、亚克力制品的批发、进出口,并提供相关配套服务。 【依法须经批准的项目,经相关部门批准后方可开展经营活动】, zd=after_content}, {zdmc=变更日期, zdmcdata=20171206, zd=change_date}, {zdmc=变更事项, zdmcdata=经营范围变更, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=PAUL DAVID BENJAMIN CONSIDINE, zd=before_content}, {zdmc=变更后内容, zdmcdata=TIMOTHY BRIAN CONSIDINE, zd=after_content}, {zdmc=变更日期, zdmcdata=20171206, zd=change_date}, {zdmc=变更事项, zdmcdata=法定代表人变更, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=MICHAEL PATRICK THOMPSON;BRIAN ROSS GORMAN;TIMOTHY BRIAN CONSIDINE;GRAHAM PHILIP DAVIES, zd=before_content}, {zdmc=变更后内容, zdmcdata=无, zd=after_content}, {zdmc=变更日期, zdmcdata=20171206, zd=change_date}, {zdmc=变更事项, zdmcdata=董事备案, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}], [{zdmc=变更前内容, zdmcdata=无, zd=before_content}, {zdmc=变更后内容, zdmcdata=2017-09-18章程备案, zd=after_content}, {zdmc=变更日期, zdmcdata=20171206, zd=change_date}, {zdmc=变更事项, zdmcdata=章程备案, zd=reg_item_gb}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商行政管理局, zd=XXSSDW}]], tablename=变更信息}, {tabledata=[[{zdmc=备案日期, zdmcdata=2010/5/24, zd=A4}, {zdmc=企业备案号, zdmcdata=3100633346, zd=A3}, {zdmc=法定代表人, zdmcdata=Paul David considine, zd=A5}, {zdmc=信息类别, zdmcdata=登记类, zd=XXLB}, {zdmc=来源部门, zdmcdata=上海海关, zd=XXSSDW}]], tablename=自理报检单位备案}], resultZZL=null, resultWYL=null, resultGYL=null, resultZXL=null, resultJDL=[{tabledata=[[{zdmc=信用等级, zdmcdata=A, zd=A8}, {zdmc=信息类别, zdmcdata=监管类, zd=XXLB}, {zdmc=来源部门, zdmcdata=上海海关, zd=XXSSDW}]], tablename=信用ABCD级}, {tabledata=[[{zdmc=年检结果, zdmcdata=年检结果正常, zd=annlresult}, {zdmc=年检年度, zdmcdata=2009, zd=annlyear}, {zdmc=信息类别, zdmcdata=监管类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商局, zd=XXSSDW}], [{zdmc=年检结果, zdmcdata=年检结果正常, zd=annlresult}, {zdmc=年检年度, zdmcdata=2010, zd=annlyear}, {zdmc=信息类别, zdmcdata=监管类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商局, zd=XXSSDW}], [{zdmc=年检结果, zdmcdata=年检结果正常, zd=annlresult}, {zdmc=年检年度, zdmcdata=2011, zd=annlyear}, {zdmc=信息类别, zdmcdata=监管类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商局, zd=XXSSDW}], [{zdmc=年检结果, zdmcdata=年检结果正常, zd=annlresult}, {zdmc=年检年度, zdmcdata=2012, zd=annlyear}, {zdmc=信息类别, zdmcdata=监管类, zd=XXLB}, {zdmc=来源部门, zdmcdata=市工商局, zd=XXSSDW}]], tablename=年检信息}], resultPJL=null}}\";\n";

        JSONArray jsonArr = JSONArray.parseArray(a);
        System.out.println(jsonArr);
    }

    public static String readFile(String path) throws Exception {
        File file=new File(path);
        FileInputStream fis = new FileInputStream(file);
        FileChannel fc = fis.getChannel();
        ByteBuffer bb = ByteBuffer.allocate(new Long(file.length()).intValue());
        //fc向buffer中读入数据
        fc.read(bb);
        bb.flip();
        String str=new String(bb.array(),"UTF8");
        fc.close();
        fis.close();
        return str;

    }
    /**
     * xml转json
     * @param xmlStr
     * @return
     * @throws DocumentException
     */
    public static JSONObject xml2Json(String xmlStr) throws DocumentException{
        Document doc= DocumentHelper.parseText(xmlStr);
        JSONObject json=new JSONObject();
        dom4j2Json(doc.getRootElement(), json);
        return json;
    }

    /**
     * xml转json
     * @param element
     * @param json
     */
    public 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;
                    if(o instanceof JSONObject){//如果此元素已存在,则转为jsonArray
                        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());
                }
            }
        }
    }

    public static boolean isEmpty(String str) {

        if (str == null || str.trim().isEmpty() || "null".equals(str)) {
            return true;
        }
        return false;
    }
}