public static void main(String[] args) {String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +"<customer>\n" +"    <id>100</id>\n" +"    <name>lanying</name>\n" +"    <age>29</age>\n" +"    <books>\n" +"        <book>\n" +"            <id>1</id>\n" +"            <name>三国演义</name>\n" +"            <price>100.0</price>\n" +"        </book>\n" +"        <book>\n" +"            <id>2</id>\n" +"            <name>红楼梦</name>\n" +"        </book>\n" +"        <book>\n" +"            <id>1</id>\n" +"            <price>100.0</price>\n" +"        </book>\n" +"        <book>\n" +"            <name>西游记</name>\n" +"            <price>50.0</price>\n" +"        </book>\n" +"    </books>\n" +"</customer>";String data = XmlToJsonUtil.xmlToJson(xml);JSONObject jsonObj = JSONObject.parseObject(data);System.out.println("jsonObj = " + jsonObj); // 层层解析JSONObject customer = jsonObj.getJSONObject("customer");System.out.println("customer = " + customer);JSONObject books = customer.getJSONObject("books");System.out.println("books = " + books);JSONArray jsonArr = books.getJSONArray("book");System.out.println("book = " + jsonArr);for(int i = 0; i < jsonArr.size(); i ++){JSONObject book = jsonArr.getJSONObject(i);System.out.println(book.toJSONString());}
}
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.*;import java.util.List;public class XmlToJsonUtil {/** xml转json*/public static String xmlToJson(String xml) {try {// xmlStr ==> DocumentDocument doc = DocumentHelper.parseText(xml);// Document ==> jsonStrElement rootEle = doc.getRootElement();JSONObject json = new JSONObject();dom4j2Json(rootEle, json);// 为了让JSON中包含根元素的key,才创建了resultJSON对象JSONObject resultJSON = new JSONObject();resultJSON.put(rootEle.getName(), json);return resultJSON.toJSONString();} catch (DocumentException e) {System.out.println("数据解析失败");   // 可改为打印日志}return null;}/*** 将element里面的内容存入参数json中** @param element* @param json*/private static void dom4j2Json(Element element, JSONObject json) {// Step 1: 如果有属性 形如:<XXX attr="xxx">张三</XXX>for (Object o : element.attributes()) {Attribute attr = (Attribute) o;if (!isEmpty(attr.getValue())) {json.put("@" + attr.getName(), attr.getValue());        // key前加@存入参数json 形如:{"@attr":"value"},可自定义存入格式}}// 获取element的子一级元素List<Element> childElements = element.elements();// Step 2: 形如:<name>张三</name>if (childElements.isEmpty() && !isEmpty(element.getText())) {   // 如果没有子元素,只有一个值json.put(element.getName(), element.getText());}// Step 3: 子元素 e是element的子一级元素for (Element e : childElements) {                               // element有子元素if (e.elements().isEmpty()) {                               // 子元素e没有子元素(子子元素)// attrfor (Object o : e.attributes()) {Attribute attr = (Attribute) o;if (!isEmpty(attr.getValue())) {json.put("@" + attr.getName(), attr.getValue());}}// <name>张三</name>if (!isEmpty(e.getText())) {json.put(e.getName(), e.getText());}} else {                                                // 子元素也有子元素JSONObject childJson = new JSONObject();dom4j2Json(e, childJson);                           // 递归,将e中的数据存入childJsonObject o = json.get(e.getName());                   // 通过这个子元素e的key从参数json中获取内容if (o == null) {    // 说明json中没有存入过该类型的子元素,则当前的childJson作为第一个元素存入参数jsonif (!childJson.isEmpty()) {json.put(e.getName(), childJson);}} else {            // json中已经存入过该类型的子元素,说明不止一个,需要转成数组形式存入参数jsonJSONArray jsonArr = null;if (o instanceof JSONObject) {                  // 当前o是之前存入的子元素,即"第一个子元素"JSONObject jsonObj = (JSONObject) o;json.remove(e.getName());                   // 删除之前的JSONObject(稍候以JSONArray形式存入)jsonArr = new JSONArray();                  // 新建JSONArrayjsonArr.add(jsonObj);                       // 添加"第一个子元素"jsonArr.add(childJson);                     // 添加当前子元素} else if (o instanceof JSONArray) {            // 如果已经存在JSONArray,则直接在该JSONArray中添加jsonArr = (JSONArray) o;jsonArr.add(childJson);                     // 添加当前子元素}json.put(e.getName(), jsonArr);                 // {e:[{child1},{child2},{child3}]}}}}}public static boolean isEmpty(String str) {if (str == null || str.trim().isEmpty() || "null".equals(str)) {return true;}return false;}}

Maven依赖

dom4j 和 fastjson

<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.1</version>
</dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version>
</dependency>

结果

jsonObj的内容:

{"customer": {"books": {"book": [{"price": "100.0","name": "三国演义","id": "1"},{"name": "红楼梦","id": "2"},{"price": "100.0","id": "1"},{"price": "50.0","name": "西游记"}]},"name": "lanying","id": "100","age": "29"}
}

学习网址

【xml转换成json】https://www.cnblogs.com/liushisaonian/p/8657555.html
【Dom4j中getStringValue()和getText()用法和区别】https://blog.csdn.net/www_wangjun/article/details/71404204
【fastjson中toString与toJSONString的差别】https://www.cnblogs.com/zouhong/p/12091493.html
【xml <=> json在线转换工具】https://www.bejson.com/xml2json/
【JSONobject按照put顺序存储和读取】https://blog.csdn.net/dushu990/article/details/80670088

xml转json(dom4j + fastjson)相关推荐

  1. 【4-8】《XML与JSON》——XML、解析XML、SAX、DOM4J、XStream、JSON、Gson、Fastjson

    文章目录 XML与JSON 一.XML 1.XML概述 1.XML语法格式 2.语法进阶CDATA(了解) 2.解析XML 1.SAX解析 2.DOM解析 3.JDOM解析 4.DOM4J解析 3.D ...

  2. XML与JSON 及其对应的Java包 Gson FastJson

    4-8 XML与JSON XML概述 可扩展标记语言: xml与平台无关,是一门独立的标记语言.与任何编程语言无关. xml具有自我描述性,能够清晰地展现其特性. xml数据不一定是文件形式存储,也可 ...

  3. XML和JSON 数据交换格式

    为什么80%的码农都做不了架构师?>>>    一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...

  4. JavaSE——XML与JSON(语法格式、解析内容)

    第6节 XML与JSON 一.XML 1.1 XML简介 XML全称为可扩展标记语言(extensible Markup Language) . 特性: xml具有平台无关性,是一门独立的标记语言: ...

  5. XML 与 JSON 解析教程

    目录 前言 一.XML 是什么? 1.1 简介 1.2 为什么要学习 XML? 1.3 XML 文件 1.4 XML 语法格式 二.JSON 2.1 简介 2.2 对象格式 2.3 数组格式 2.4 ...

  6. XML与JSON的生成与解析

    1. XML 1.1 XML简介 可标记语言(extensible Markup Language) 特性: XML具有平台无关性,是一门独立的语言 XML具有自我描述性 XML功能: 网络传输文件 ...

  7. xml、json、url的一些简单介绍

    一:XML 和 JSON 的简单介绍 xml 和 json 都是程序和程序之间传送和交流数据的方式. 都是独立于 各种编程语言 而存在的. 早些时间 xml 用的非常多,后来 json 出现了,jso ...

  8. XML与JSON(超级详解)

    XML与JSON 文章目录 XML与JSON 前言 一.XML简介 1.1.XML是什么? 1.2.为什么学习XML 1.3.XML文件 1.4.XML语法格式 1.5.语法进阶CDATA (了解) ...

  9. XML与Json比较

    XML与JSON解析 一.XML与JSON是什么? XML 和 JSON 是现今互联网中最常用的两种数据交换格式..虽然这两种格式的设计目标并不相同,但它们常常用于同一个任务,也就是数据交换中.XML ...

  10. Java学习(第十二天)XML和JSON

    XML和json XML:可扩展标记语言(eXtensible Markup Language) 特性: 1.xml具有平台无关性,是一门独立的标记语言 2.xml具有自主描述性 学习xml的理由: ...

最新文章

  1. 批量下载文件,循环中文件流没有关闭导致每次下载会累加之前的下载文件
  2. Python pytagcloud 中文分词 生成标签云 系列(一)
  3. android银行卡匹配、详情展开动画、仿爱奇艺视频拖拽、扫码识别手机号等源码...
  4. 使用apply调用函数
  5. java安装库源文件_JOGL安装
  6. 实验三 Linux的启动与关闭,实验三:跟踪分析Linux内核的启动过程
  7. P3076,jzoj3187-的士【贪心】
  8. C:C++ 函数返回多个参数
  9. SpringBoot集成Maven工程
  10. python面试1000题之4-6
  11. C语言实现常用排序算法——基数排序
  12. 关于在CLASSWIZARD中找不到工作区间中的类的解决方法
  13. 话单分析账单分析行踪分析综合数据研判软件
  14. 微信小程序获取用户手机号
  15. poj3537 Crosses ans Crosses
  16. android 带刻度的滑动条_Android自定义滑动刻度尺
  17. Computer Architectrure: Quantitative Approch 第三章第四节
  18. html 网站发布到公网
  19. PD-GAN: Probabilistic Diverse GAN for Image Inpainting
  20. 使用ubuntu遇到的问题-An error occurred,please run Package Manager...

热门文章

  1. ShadowGun代码
  2. 联想服务器加装显卡无显示,标配11201355主板的启天M4330在 Win8系统加装独立显卡“无显无报警”...
  3. STM32L452CCU6 STM32L432KCU6 GD32F407VKT6 嵌入式技术数据手册 32位ARM
  4. 客房管理系统前台代码html,中顶酒店客房前台管理系统
  5. 《密码编码学与网络安全》William Stalling著---学习笔记(一)【知识点速过】【传统密码+经典对称加密算法+经典公钥密码算法+密码学Hash函数】
  6. 【转】通过《淘宝这十年》总结的脑图
  7. 卡西欧计算机做英语,卡西欧的这个小萌物 原来是台英语学习机
  8. 华为eNSP三层架构网络配置
  9. golang mysql null_Golang将变量声明为NULL
  10. 字节跳动怎么都十万人了?