xmlをjsonに変換し、jsonを解析

12445 ワード

冒頭:一般会社のプロジェクトでは、xmlメッセージを返すことが多く、xmlをjsonに解析する方法があります.ここでは、sax解析方式を採用しています.
一.maven依存

    org.jdom
   jdom2
   2.0.6


   com.alibaba
   fastjson
   1.2.46

二.コードは次のとおりです.
public class TestXml2Json {
    public static void main(String[] args) throws JDOMException, IOException {
        String xml="\"1.0\" encoding=\"utf-8\" ?>" +
                "\"UserMobilePay\" PlatformID=\"b2ctest\">" +
                "M20150521084825" +
                "5000.00" +
                "0.5" +
                "zhangbingfa" +
                "zhangbingfa" +
                "0" +
                "123 " +
                "";
        //  xml  
        JSONObject json=xml2Json(xml.getBytes());
        //  json  
        JSONObject moBaoAccount = (JSONObject) json.get("MoBaoAccount");
        List commission = (List) moBaoAccount.get("Commission");
        Order order = new Order();
        //        
        order.setCommission((String) commission.get(0));
        System.out.println(order.getOrderNo()+">>>>>>>>>"+order.getCommission()+">>>>>>>"+order.getTradeAmt());
        System.out.println(json.toJSONString());

    }

    public static JSONObject xml2Json(byte[] xml) throws JDOMException, IOException {
        JSONObject jsonObject = new JSONObject();
        //          
        InputStream is = new ByteArrayInputStream(xml);
        // sax  ,       
        SAXBuilder saxBuilder = new SAXBuilder();
        //  xml  
        Document document = saxBuilder.build(is);
        //     ,  xml
        Element rootElement = document.getRootElement();
        //        
        jsonObject.put(rootElement.getName(),iterateElement(rootElement));
        return jsonObject;
    }

    private static JSONObject iterateElement(Element rootElement) {
        //          
        List note = rootElement.getChildren();
        Element et;
        JSONObject jsonObject = new JSONObject();
        List list;
        for(int i=0;i;i++){
            list = new LinkedList();
            et = (Element) note.get(i);
            //    >               if(et.getTextTrim().equals("")){
                if(et.getChildren().size() == 0) continue;
                //    ,        
                if(jsonObject.containsKey(et.getName())){
                    list = (List)jsonObject.get(et.getName());
                }
                list.add(iterateElement(et));
                jsonObject.put(et.getName(),list);
            }else{
                if(jsonObject.containsKey(et.getName())){
                    list = (List)jsonObject.get(et.getName());
                }
                //   ,  1,  1
                list.add(et.getTextTrim());
                jsonObject.put(et.getName(),list);
            }
        }
        return jsonObject;
    }
}
class Order{
    private String OrderNo;
    private String TradeAmt;
    private String Commission;

    public String getOrderNo() {
        return OrderNo;
    }

    public void setOrderNo(String orderNo) {
        OrderNo = orderNo;
    }

    public String getTradeAmt() {
        return TradeAmt;
    }

    public void setTradeAmt(String tradeAmt) {
        TradeAmt = tradeAmt;
    }

    public String getCommission() {
        return Commission;
    }

    public void setCommission(String commission) {
        Commission = commission;
    }
}

三、結果は以下の通り
{ "MoBaoAccount": { "MerchID": ["zhangbingfa"], "UserID": ["zhangbingfa"], "Commission": ["0.5"], "OrderNo": ["M2015052198456"], "TradeAmt": ["5000.00"], "CustParam": ["321"], "tradeType": ["0"] }
}