xml 转 json
2016-02-22 20:59
691 查看
package com.zouhao.XmlJsonUtils; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class Xml2JsonUtil { /** * 转换一个xml格式的字符串到json格式 * * @param xml * xml格式的字符串 * @return 成功返回json 格式的字符串;失败反回null */ @SuppressWarnings("unchecked") public static String xml2JSON(String xml) { JSONObject obj = new JSONObject(); try { InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8")); SAXBuilder sb = new SAXBuilder(); Document doc = sb.build(is); Element root = doc.getRootElement(); obj.put(root.getName(), iterateElement(root)); return obj.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 转换一个xml格式的字符串到json格式 * * @param file * java.io.File实例是一个有效的xml文件 * @return 成功反回json 格式的字符串;失败反回null */ @SuppressWarnings("unchecked") public static String xml2JSON(File file) { JSONObject obj = new JSONObject(); try { SAXBuilder sb = new SAXBuilder(); Document doc = sb.build(file); Element root = doc.getRootElement(); obj.put(root.getName(), iterateElement(root)); return obj.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 一个迭代方法 * * @param element * : org.jdom.Element * @return java.util.Map 实例 */ @SuppressWarnings("unchecked") private static Map iterateElement(Element element) { List jiedian = element.getChildren(); Element et = null; Map obj = new HashMap(); List list = null; for (int i = 0; i < jiedian.size(); i++) { list = new LinkedList(); et = (Element) jiedian.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) { String xml = "<MapSet>" + "<MapGroup id='Sheboygan'>" + "<Map>" + "<Type>MapGuideddddddd</Type>" + "<SingleTile>true</SingleTile>" + "<Extension>" + "<ResourceId>ddd</ResourceId>" + "</Extension>" + "</Map>" + "<Map>" + "<Type>ccc</Type>" + "<SingleTile>ggg</SingleTile>" + "<Extension>" + "<ResourceId>aaa</ResourceId>" + "</Extension>" + "</Map>" + "<Extension />" + "</MapGroup>" + "<ddd>" + "33333333" + "</ddd>" + "<ddd>" + "444" + "</ddd>" + "</MapSet>"; System.out.println(xml); System.out.println( Xml2JsonUtil.xml2JSON(xml)); } }
相关文章推荐
- 系列文章--突袭HTML5之Javascript
- JS中的“!!”
- JS事件传播-冒泡和捕获
- js正则截取两个字符串之间的字符串
- WebKit之如何实现JS DOM binding—基于V8分析
- angular.js规范写法
- angular.js写法不规范导致错误
- javascript 复习代码
- javascript中常用的节点方法
- javascript中form表单的处理
- javascript省市级联方式
- javascript event对象的clientX,offsetX,screenX,pageX区别
- Java 处理json经常使用代码
- IE>js打印
- js函数传递两个参数
- extjs里(function(){Ext.onReady(function(){});})();为什么要这么写
- 韩顺平 javascript教学视频_学习笔记23_js事件驱动机制深入理解_js常用事件_js版计算器
- JSPatch在MAC下的使用
- JSON的在javascript中的常用方法
- iClient for JavaScript VectorLayer详细使用指南