zoukankan      html  css  js  c++  java
  • java将XML文档转换成json格式数据

    功能

    将xml文档转换成json格式数据


    说明

    依赖包:
    1. jdom-2.0.2.jar : xml解析工具包;
    2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包


    程序源代码

    package com.xxx.open.pay.util;
    
    
    import com.alibaba.fastjson.JSONObject;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * Created by 1250052380@qq.com on 2015/5/19.
     */
    public class XmlUtil {
        public static JSONObject xml2JSON(byte[] xml) throws JDOMException, IOException {
            JSONObject json = new JSONObject();
            InputStream is = new ByteArrayInputStream(xml);
            SAXBuilder sb = new SAXBuilder();
            org.jdom2.Document doc = sb.build(is);
            Element root = doc.getRootElement();
            json.put(root.getName(), iterateElement(root));
            return json;
        }
    
        private static JSONObject iterateElement(Element element) {
            List node = element.getChildren();
            Element et = null;
            JSONObject obj = new JSONObject();
            List list = null;
            for (int i = 0; i < node.size(); i++) {
                list = new LinkedList();
                et = (Element) node.get(i);
                if (et.getTextTrim().equals("")) {
                    if (et.getChildren().size() == 0)
                        continue;
                    if (obj.containsKey(et.getName())) {
                        list = (List) obj.get(et.getName());
                    }
                    list.add(iterateElement(et));
                    obj.put(et.getName(), list);
                } else {
                    if (obj.containsKey(et.getName())) {
                        list = (List) obj.get(et.getName());
                    }
                    list.add(et.getTextTrim());
                    obj.put(et.getName(), list);
                }
            }
            return obj;
        }
    
        public static void main(String[] args) throws JDOMException, IOException {
            String xml="<?xml version="1.0" encoding="utf-8" ?><MoBaoAccount MessageType="UserMobilePay" PlatformID="b2ctest"><OrderNo>M20150521084825</OrderNo><TradeAmt>5000.00</TradeAmt><Commission>0.5</Commission><UserID>zhuxiaolong</UserID><MerchID>zhuxiaolong1</MerchID><tradeType>0</tradeType><CustParam>123</CustParam> <NotifyUrl>http://mobaopay.com/callback.do</NotifyUrl><TradeSummary>订单</TradeSummary></MoBaoAccount>";
            JSONObject json=xml2JSON(xml.getBytes());
            System.out.println(json.toJSONString());
        }
    }
    

    执行结果

    • XML原文:
    <?xml version="1.0" encoding="utf-8" ?

    > <MoBaoAccount MessageType="UserMobilePay" PlatformID="b2ctest"> <OrderNo>M20150521084825</OrderNo> <TradeAmt>5000.00</TradeAmt> <Commission>0.5</Commission> <UserID>xiaolong</UserID> <MerchID>xiaolong1</MerchID> <tradeType>0</tradeType> <CustParam>123</CustParam> <NotifyUrl>http://mobaopay.com/callback.do</NotifyUrl> <TradeSummary>订单</TradeSummary> </MoBaoAccount>

    • 转换后的json格式数据
    {
        "MoBaoAccount": {
            "Commission": [
                "0.5"
            ],
            "CustParam": [
                "123"
            ],
            "MerchID": [
                "zhuxiaolong1"
            ],
            "NotifyUrl": [
                "http://mobaopay.com/callback.do"
            ],
            "OrderNo": [
                "M20150521084825"
            ],
            "TradeAmt": [
                "5000.00"
            ],
            "TradeSummary": [
                "订单"
            ],
            "UserID": [
                "zhuxiaolong"
            ],
            "tradeType": [
                "0"
            ]
        }
    }
  • 相关阅读:
    取得窗口大小和窗口位置兼容所有浏览器的js代码
    一个简单易用的导出Excel类
    如何快速启动chrome插件
    网页表单设计案例
    Ubuntu下的打包解包
    The source file is different from when the module was built. Would you like the debugger to use it anyway?
    FFisher分布
    kalman filter
    Group delay Matlab simulate
    24位位图格式解析
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/8406904.html
Copyright © 2011-2022 走看看