XML转JSON

方式一:


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;

/**
 * Created by chengsheng on 2015/8/19.
 */
public class TestXml2Json {
    public static void main(String[] args) throws Exception {
      //  String xmlStr= readFile("C:\\Users\\yq\\Desktop\\xxx.txt");
        String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
        		"<Service>\r\n" + 
        		"<Service_Header>\r\n" + 
        		"<reply_qmgr>QMAFAIN03</reply_qmgr>\r\n" + 
        		"<service_response>\r\n" + 
        		"<code>0000</code>\r\n" + 
        		"<desc>成功</desc>\r\n" + 
        		"<status>COMPLETE</status>\r\n" + 
        		"</service_response>\r\n" + 
        		"<msglog>1</msglog>\r\n" + 
        		"<timeout>150</timeout>\r\n" + 
        		"<name>XX</name>\r\n" + 
        		"<start_time>1630649964192</start_time>\r\n" + 
        		"<start_timestamp>2021-09-03 14:19:24.192</start_timestamp>\r\n" + 
        		"<service_sn>051320210903131169</service_sn>\r\n" + 
        		"<service_id>05130000000001</service_id>\r\n" + 
        		"<requester_id>0373</requester_id>\r\n" + 
        		"<branch_id>320585100</branch_id>\r\n" + 
        		"<trace_msg>Reply to responseQ - IBM.SERVICE.RESPONSE.OUT.AFE: QMAFAIN03</trace_msg>\r\n" + 
        		"<end_timestamp>2021-09-03 14:19:24.269</end_timestamp>\r\n" + 
        		"</Service_Header>\r\n" + 
        		"<Service_Body>\r\n" + 
        		"<request>\r\n" + 
        		"<querytype>1</querytype>\r\n" + 
        		"<cust_id>2015002410</cust_id>\r\n" + 
        		"<cust_name/>\r\n" + 
        		"<cert_type/>\r\n" + 
        		"<cert_id/>\r\n" + 
        		"<frcode>057</frcode>\r\n" + 
        		"<orgcode>320585100</orgcode>\r\n" + 
        		"<usercode>0625</usercode>\r\n" + 
        		"<syscode>cmis</syscode>\r\n" + 
        		"</request>\r\n" + 
        		"<response>\r\n" + 
        		"<response>\r\n" + 
        		"<result_code>0000</result_code>\r\n" + 
        		"<result_info>成功</result_info>\r\n" + 
        		"<alarminfo>\r\n" + 
        		"<risklevel>3</risklevel>\r\n" + 
        		"<riskcreatedate>2020/09/10</riskcreatedate>\r\n" + 
        		"<alarmsignal>\r\n" + 
        		"<alarmsignaldetail>\r\n" + 
        		"<alarmsignallevel>3</alarmsignallevel>\r\n" + 
        		"<signalcreatedate>2020/09/09</signalcreatedate>\r\n" + 
        		"<signalno>C008</signalno>\r\n" + 
        		"<signaldesc>大苏打大苏打</signaldesc>\r\n" + 
        		"<signalStatus>50</signalStatus>\r\n" + 
        		"<Inputuserid>0625</Inputuserid>\r\n" + 
        		"<Inputorgid>103210</Inputorgid>\r\n" + 
        		"<SignalType>1</SignalType>\r\n" + 
        		"<Customerid>2015002410</Customerid>\r\n" + 
        		"<Alarminfono>TC2020091007830511</Alarminfono>\r\n" + 
        		"<SOURCETYPE>0101</SOURCETYPE>\r\n" + 
        		"<CUSTOMERNAME></CUSTOMERNAME>\r\n" + 
        		"<FRID>057</FRID>\r\n" + 
        		"</alarmsignaldetail>\r\n" + 
        		"</alarmsignal>\r\n" + 
        		"<alarmsignal>\r\n" + 
        		"<alarmsignaldetail>\r\n" + 
        		"<alarmsignallevel>1</alarmsignallevel>\r\n" + 
        		"<signalcreatedate>2018/09/18</signalcreatedate>\r\n" + 
        		"<signalno>P335</signalno>\r\n" + 
        		"<signaldesc>dqwdw</signaldesc>\r\n" + 
        		"<signalStatus>50</signalStatus>\r\n" + 
        		"<Inputuserid>0660</Inputuserid>\r\n" + 
        		"<Inputorgid>103210</Inputorgid>\r\n" + 
        		"<SignalType>1</SignalType>\r\n" + 
        		"<Customerid>2015002410</Customerid>\r\n" + 
        		"<Alarminfono>TC2018091906817166</Alarminfono>\r\n" + 
        		"<SOURCETYPE>0101</SOURCETYPE>\r\n" + 
        		"<CUSTOMERNAME></CUSTOMERNAME>\r\n" + 
        		"<FRID>057</FRID>\r\n" + 
        		"</alarmsignaldetail>\r\n" + 
        		"</alarmsignal>\r\n" + 
        		"<alarmsignal>\r\n" + 
        		"<alarmsignaldetail>\r\n" + 
        		"<alarmsignallevel>1</alarmsignallevel>\r\n" + 
        		"<signalcreatedate>2020/10/09</signalcreatedate>\r\n" + 
        		"<signalno>P258</signalno>\r\n" + 
        		"<signaldesc>测试</signaldesc>\r\n" + 
        		"<signalStatus>20</signalStatus>\r\n" + 
        		"<Inputuserid>0625</Inputuserid>\r\n" + 
        		"<Inputorgid>103210</Inputorgid>\r\n" + 
        		"<SignalType>1</SignalType>\r\n" + 
        		"<Customerid>2015002410</Customerid>\r\n" + 
        		"<Alarminfono>TC2020101007868195</Alarminfono>\r\n" + 
        		"<SOURCETYPE>0101</SOURCETYPE>\r\n" + 
        		"<CUSTOMERNAME></CUSTOMERNAME>\r\n" + 
        		"<FRID>057</FRID>\r\n" + 
        		"</alarmsignaldetail>\r\n" + 
        		"</alarmsignal>\r\n" + 
        		"</alarminfo>\r\n" + 
        		"</response>\r\n" + 
        		"</response>\r\n" + 
        		"</Service_Body>\r\n" + 
        		"</Service>";

        JSONObject json = xml2Json(xmlStr);
        System.out.println("xml2Json:"+json.toJSONString());

    }

    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);
        Element rootElement = doc.getRootElement();
        JSONObject rootJson=new JSONObject();
        JSONObject json=new JSONObject();
        //设置根节点
        String name = rootElement.getName();
        rootJson.put(name,json);
        dom4j2Json(rootElement, json);
        return rootJson;
    }

    /**
     * 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;
    }


}

方式二:



import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;


public class MyTest {
    private static final String XML_TEXT = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <Service> <Service_Header> <service_response> <status>COMPLETE</status> <code>000000</code> <desc>交易成功</desc> </service_response> </Service_Header> <Service_Body> <ext_attributes> <templatecode>000131</templatecode> <transcode>200020</transcode> <channelcode>033</channelcode> <channeldate>20191203</channeldate> <channelseq>175336047666</channelseq> <brno>321081999</brno> <tellerno>321081999B05</tellerno> <terminalno>321081999B05</terminalno> <chktellerno></chktellerno> <authtellerno></authtellerno> <authtellerno2></authtellerno2> <areacode>3129</areacode> <itemno>120135</itemno> <subitemno>00</subitemno> <chkdate>20191203</chkdate> <hostdate></hostdate> <hostseq></hostseq> <hostret></hostret> <hostretmsg></hostretmsg> <statedate>20191203</statedate> <agentserialno>0091883560</agentserialno> <errorcode>000000</errorcode> <errormsg>交易成功</errormsg> </ext_attributes> <response> <return_code>07</return_code> <return_msg>等待用户输入支付密码</return_msg> <out_trade_no/> <transdatetime>20191203091708</transdatetime> </response> </Service_Body> </Service> ";
    //格式化
    private static final int PRETTY_PRINT_INDENT_FACTOR = 4;
	public static void main(String[] args) {
		JSONObject xmlJSONObj;
		 String jsonPrettyPrintString="";
		try {
			xmlJSONObj = XML.toJSONObject(XML_TEXT);
			 jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

        System.out.println(jsonPrettyPrintString);
	}

}

转换结果
{
“Service”: {
“Service_Header”: {
“service_response”: {
“code”: “000000”,
“status”: “COMPLETE”,
“desc”: “交易成功”
}
},
“Service_Body”: {
“ext_attributes”: {
“terminalno”: “321081999B05”,
“hostretmsg”: “”,
“hostret”: “”,
“chkdate”: 20191203,
“transcode”: 200020,
“chktellerno”: “”,
“hostdate”: “”,
“hostseq”: “”,
“itemno”: 120135,
“statedate”: 20191203,
“channelcode”: 33,
“areacode”: 3129,
“errormsg”: “交易成功”,
“channeldate”: 20191203,
“authtellerno”: “”,
“tellerno”: “321081999B05”,
“channelseq”: 175336047666,
“authtellerno2”: “”,
“templatecode”: “000131”,
“subitemno”: “00”,
“agentserialno”: “0091883560”,
“errorcode”: “000000”,
“brno”: 321081999
},
“response”: {
“out_trade_no”: “”,
“return_msg”: “等待用户输入支付密码”,
“transdatetime”: 20191203091708,
“return_code”: 7
}
}
}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值