开篇:一般公司的项目,很多是返回xml报文,如何将xml解析为json,这里采用一种方法,sax解析方式
一.maven 依赖
<dependency> <groupId>org.jdom</groupId> <artifactId>jdom2</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.46</version> </dependency>
二.代码如下
public class TestXml2Json { 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>zhangbingfa</UserID>" + "<MerchID>zhangbingfa</MerchID>" + "<tradeType>0</tradeType>" + "<CustParam>123</CustParam> " + "</MoBaoAccount>"; //解析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<note.size();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()); } //获得值,例如<a>1</a>,得到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"]
}
}