xml TO json(非递归实现)
之前的xml文件转化为json是利用json-lib或者递归方式实现的,在效率方面难免有些不足.经过改进,利用栈实现了非递归的方式,首先需要导入dom4j的jar包。
import com.alibaba.fastjson.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;
import java.util.Stack;/*** Created by 东方电视台 on 2017/7/28.*/
public class xmlTojson {public static void main(String[] args) throws Exception{JSONObject result = getJson("test.xml");System.out.println(result.toString());}public static Document readXml(String filename) throws DocumentException {Document document = null;try{//获取xml文件File file = new File(filename);//创建SAXReader对象SAXReader reader = new SAXReader();//读取文件document = reader.read(file);}catch (DocumentException e){e.printStackTrace();}return document;}public static JSONObject getJson(String filename) throws Exception {JSONObject jsonObj = new JSONObject();try {Document doc = readXml(filename);Element root = doc.getRootElement();Stack<Element> stackElement = new Stack<Element>();Stack<JSONObject> stackJson = new Stack<JSONObject>();stackElement.push(root);stackJson.push(jsonObj);while (!stackElement.isEmpty()) {Element element = stackElement.pop();JSONObject json = stackJson.pop();List<Element> childList = element.elements();//判断该节点的子节点下是否为叶子节点for (Element e : childList) {//如果子节点为叶子节点if (e.elements().isEmpty()) {json.put(e.getName(), e.getText());} else {JSONObject jsonNew = new JSONObject();json.put(e.getName(), jsonNew);stackElement.push(e);stackJson.push(jsonNew);}}}} catch (Exception e) {e.printStackTrace();}return jsonObj;}
}
xml TO json(非递归实现)相关推荐
- php3级分类,关于php非递归三级分类输出json数据
** 有以下数据结构表 ** ** 需要输出json格式为: ** pickerValueArray: [ {label: 'phone',value: 0,children: [ { label: ...
- 【科普】:10分钟看明白XML和JSON
引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...
- 常见Serialize技术探秘(ObjectXXStream、XML、JSON、JDBC byte编码、Protobuf)
目前业界有各种各样的网络输出传输时的序列化和反序列化方案,它们在技术上的实现的初衷和背景有较大的区别,因此在设计的架构也会有很大的区别,最终在落地后的:解析速度.对系统的影响.传输数据的大小.可维护性 ...
- XML和JSON 数据交换格式
为什么80%的码农都做不了架构师?>>> 一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
- java树状结构递归与非递归实现,外加sql递归实现
关于下列面出现的泛型自行修改 1.java8流式非递归实现 public Map<String, List<E>> selectCatalogue(int type, int ...
- Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)
一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...
- XML转Json 设置指定节点为数组
原XML <response><itemList><item><number>5</number></item></ite ...
- XML与Json解析
目录 XML解析 一.DOM4J解析XML文件(非重点): 二.Dom4J之XPATH解析XML(非重点) 三.生成XML Json解析(重点) XML解析 解析网络xml文件:这里我们提供一个网址: ...
最新文章
- Udacity机器人软件工程师课程笔记(十九) - 3D感知介绍 - 主动/被动式传感器、RGB-D相机、点云
- pycharm点击右上角退出程序时terminate和disconnect区别?(别用disconnect)
- hdu 3401(单调队列优化dp)
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- H264学习_基本数据结构
- collector list 多个分组_Java 8嵌套(多级)分组依据
- matlab破损皮革定位,matlab-code-of-TDOAFDOa 干扰源定位代码,应该在 的求解过程中有帮助。 276万源代码下载- www.pudn.com...
- 一些难懂的笑话,看看你懂得多少? [转帖]
- c语言一维数组定义可用字母吗,C语言一维数组的定义和引用
- vim配置Nerdtree
- JAVA设计模式之3-抽象工厂模式
- 邮箱容量多大?163邮箱发邮件无限容量解读
- 16.PIO源码详解6-PIO_TX_ENGINE模块(PIO_TX_ENGINE.v)剖析
- 按自己的需要获取对象中的属性
- 超级电视与海信电视争第一,这是一场胜负已定的战争
- 为论文建立索引的一种方法
- 关于双网卡PVE:openwrt(LEDE) + win10直通核显+ DSM918+ 实现HDMI与声卡直通HTPC的解决方案!!
- 英雄联盟LPL比赛数据可视化详细教程,可视化的魅力,你值得拥有!!!
- 技术不局限于赚钱,还应当保护我们的家人
- 《偶像练习生》、《创造101》现象级的爆发还能在中国出现吗?【文末有彩蛋】...