【Java解析XML与JSON】

XML与JSON


1 什么是XML

XML作为数据传输和存储和配置文件和一种格式,未来开发中会被大量使用到,掌握XML的解析方法是核心。

XML(Extensible Markup Language可扩展标记语言),XML是一个以文本来描述数据的文档。

XML文档示例:

<?xml version="1.0" encoding="UTF-8"?>
<people>
    <person personid="E01">
        <name>Tony</name>
        <address>London, UK</address>
        <tel>(061)987852</tel>
    </person>
    <person personid="E02">
        <name>Bill</name>
        <address>Beijing, China</address>
        <tel>12315</tel>
    </person>
</people>

2 XML的用途

  1. 充当显示数据(以XML充当显示层)
  2. 存储数据(存储层)的功能
  3. 以XML描述数据,并在联系服务器与系统的其余部分之间传递。
    从某种角度讲,XML是数据封装和消息传递技术。

client—(XML数据)—>server(解析XML数据、生成相应的对象、使用这个对象)

3 SAX解析XML

(SAX是Simple API for XML的缩写)

SAX解析采用的是事件驱动,通过事件回调的方式调用DefaultHandler中的事件处理方法

了解SAX的解析方式的特点,是高效省内存,事件驱动,但不灵活,只能顺序读取与解析,通常在移动开发中使用较多,web开发中使用少

SAX是读取和操作XML数据更快速、更轻量的方法。SAX允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作,它不涉及DOM所必需的开销和概念跳跃

  • SAX API是一个基于事件的API,适用于处理数据流,即随着数据的流动而依次处理数据。
  • SAX API在其解析文档时发生一定事件的时候会有通知。在对其响应时,不作回应,保存的数据将会被抛弃。

SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler,EntityResolver和ErrorHandler。实际上只要继承DefaultHandler类就可以,DefaultHandler实现了这四个事件处理器接口,然后提供了每个抽象方法的默认实现.

//1、创建SAX解析器工厂对象
SAXParserFactory spf = SAXParserFactory.newlnstance();
//2、使用解析器工厂创建解析器实例
SAXParser saxParser = spf.newSAXParser();
//3、创建SAX解析器要使用的事件侦听器对象
PersonHandler handler = new PersonHandler();
//4、开始解析文件
saxParser.parse new File(fileName),handler);

SAX解析XML的特点:

  1. 基于事件驱动
  2. 顺序读取,速度快
  3. 不能任意读取节点(灵活性差)
  4. 解析时占用的内存小
  5. SAX更适用于在性能要求更高的设备上使用(Android开发中)

4 DOM解析XML

在Web开发中,DOM的解析方式是首选,只是在DOM中选择哪个组件是问题.

DOM:Document Object Model(文档对象模型)

DOM的特性:
定义一组Java接口,基于对象,与语言和平台无关将XML文档表示为树,在内存中解析和存储XML文档,允许随机访问文档的不同部分。

DOM解析XML:
DOM的优点,由于树在内存中是持久的,因此可以修改后更新。它还可以在任何时候在树中上下导航,API使用起来也较简单。

//1、创建一个DOM解析器工厂对象
DocumentBuilderFactory builder = DocumentBuilderFactory.newInstance();
//2、通过工厂对象创建解析器对象
DocumentBuilder db = builder. newDocumentBuilder(); 
//3、解析文档
db.parse("person.xml");
//4、从内存中读取数据
I NodeList node_person = doc. getElementsByTagName("person");

DOM解析XML的特点:

  1. 基于树型结构,通过解析器一次性把文档加载到内存中;
  2. 会比较占用内存;
  3. 可以随机访问更加灵活;
  4. 更适合在web开发中使用。

5 JDOM解析XML

第三方处理XML的组件JDOM,从效率上要比JDK原生提供的DOM要更快,并简化了API。

JDOM是两位著名的Java开发人员兼作者,Brett Mclaughlin和Jason Hunter的创作成果。
JDOM简化了与XML的交互并且比使用DOM实现更快,JDOM与DOM主要有两方面不同。

  1. JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。
  2. API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

JDOM解析XML的特点:

  1. 与DOM类似基于树型结构;
  2. 与DOM的区别:
    1. 第三方开源组件
    2. 实现使用Java的Collection接口
    3. 效率比DOM更快

6 DOM4解析XML

DOM4J不论在API的丰富、灵活性上的优势,性能上也是无可挑剔,Spring,SpringBoot等都是采用DOM4J

DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在对主流的Java XML API进行的性能、功能和易用性的评测,DOM4J 无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,Hibernate用它来读写配置文件。

SAXReader sax = new SAXReader();
Document doc = sax.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("person.xml"));
Element root = doc.getRootElement();
Iterator iterator = root.elementlterator();
遍历选代器

DOM4J解析XML的特点:

  1. 基于树型结构,第三方组件;

  2. 解析速度快,效率更高;

  3. 使用JAVA中的迭代器实现数据读取,在Web框架中使用较多(Hibernate)

7 通过对象生成XML文件

xStream组件可以快速的在xml文件与对象之间转换,这对于使用xml作为信息传输格式来说,尤其方便。

根据对象生成XML文档.
使用Java提供的java.beans.XMLEncoder和java.beans.XMLDecoder类。
这是JDK 1.4以后才出现的类

步骤:

//(1)实例化XML编码器
XMLEncoder xmlEncoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(new File("a.xml"))));
//(2)输出对象
//(3)关闭

8 各种解析方法对比

  • JDOM 和DOM在性能测试时表现不佳,在测试10M文档(很大)时内存溢出。
  • SAX表现较好,这要依赖于它特定的解析方式。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。
  • DOM4J是这场测试的获胜者,目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。

9 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON官方:http://www.json.org

JSON数据格式的特点
JSON建构于两种结构:

  1. “名称/值”对的集合
  2. 值的有序列表(数组)

JSON 表示名称/值对的方式:{“firstName”:“vince”,“lastName”:“ma”,“email”:
“finally_m@foxmail.com”}
表示数组
[“user”:[ {“firstName”:“vince”,“lastName”:“ma”,“email”:“finally_m@foxmail.com”}, {“firstName”:“lin”,“lastName”:“jacks”,“email”:“jacks@qq.com”}]

10 GSON组件的使用

GSON组件是未来开发中使用非常多的JSON工具组件,掌握JsonReader API的使用,可以灵活的处理复杂的JSONO数据.

GSON是Google开发的Java API,用于转换Java对象和json对象。

11 XML与JSON的比较

通过学习json数据的解析,理解json在开发中的重要性,作为一种通用的数据传输格式,json在web应用中被大量使用.

  1. JSON和XML的数据可读性基本相同;
  2. JSON和XML同样拥有丰富的解析手段;
  3. JSON相对于XML来讲,数据的体积小;
  4. JSON与JavaScript的交互更加方便;
  5. JSON对数据的描述性比XML较差;
  6. JSON的速度要远远快于XML。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中可以使用一些库和技术将XML解析JSON格式。以下是一种常用的解析方法: 1. 首先,导入相关的库。一个常用的库是Jackson,它提供了将XML转换为JSON的功能。在Java中可以通过Maven或Gradle将Jackson库添加到项目中。 2. 创建XML解析器。使用Jackson库,可以使用XmlMapper类来解析XML文件。可以通过实例化该类来创建一个XML解析器对象。 3. 读取XML文件。可以使用XmlMapper类的readValue()方法从文件中读取XML数据。该方法需要传入一个File对象作为参数,该对象指定了要读取的XML文件的路径。 4. 将XML解析JSON。使用XmlMapper类的writeValueAsString()方法将解析后的XML数据转换为JSON字符串。该方法需要传入解析后的XML数据作为参数。 5. 处理JSON数据。可以使用Java中的JSONObject或JSONArray对象来处理JSON数据。可以使用这些对象来获取和操作JSON中的数据。 以下是一个示例代码片段,演示如何将XML解析JSON: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import java.io.File; public class XmlToJsonParser { public static void main(String[] args) { try { // 创建XML解析XmlMapper xmlMapper = new XmlMapper(); // 读取XML文件 File xmlFile = new File("path/to/xml/file.xml"); YourXmlClass xmlData = xmlMapper.readValue(xmlFile, YourXmlClass.class); // 将XML解析JSON ObjectMapper objectMapper = new ObjectMapper(); String jsonData = objectMapper.writeValueAsString(xmlData); // 处理JSON数据 // ... System.out.println(jsonData); } catch (Exception e) { e.printStackTrace(); } } } ``` 需要注意的是,XMLJSON是不同的数据表示方式,XML可能具有多层嵌套结构,而JSON是以键值对的形式表示。解析XMLJSON时,可能需要处理XML的嵌套结构和层次关系,以正确转换为相应的JSON格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值