JavaSE之JSON


  在Java开发中,几乎无法避免与前端进行数据交互,那么,到底该以怎样的形式进行数据交互呢?早期的Java程序员在进行项目开发之前,都要制订出一套数据交互规范,为了避免数据交互出现异常,统一出了一套标准的数据交互规范–XML数据格式,但是由于互联的不断发展,JSON字符串问世后广受Java工程师喜爱,以下就JSON字符串进行简单的介绍。

1、XML

  XML(eXtensible Markup Language),可扩展标记语言。

特性

  • XML具有与平台无关性,是一门独立的标记语言;
  • XML具有自我描述性。

注意:XML是一种数据存储方式,而不是一种文件。

XML示例:

<persons> 
    <person> 
       <name></name> 
       <age></age> 
    </person> 
    <person> 
       <name></name> 
       <age></age> 
    </person> 
</persons>

2、Java解析XML的方式

  有四种方式:最常用的方式为DOM4J。

2.1、SAX解析:

  逐行读取XML数据进行解析,当读取到标签的开始/结束/内容/属性时可以触发事件。

优点

  • 能够立即开始解析,不用等所有文件加载完毕;
  • 逐行加载,节省内存空间;
  • 有时不必解析整个文档,当解析到某个条件满足时可以停止解析。

缺点

  • 单向解析,无法定位文档层次,无法同时访问同一文件的不同部分数据(因为在解析第n行时,第n-1行已经被释放);
  • 无法得知事件发生时元素的层次,只能自己维护节点的子/父关系;
  • 只读解析方式,无法修改XML内容。

2.2、DOM解析

  解析时要加载整个文档和内存中建立文档树模型,程序员可以通过操作文档树,来完成数据的获取、修改、删除等;

优点

  • 允许对数据和结构做出更改;
  • 访问是双向的,可以在任何时候在树中双向解析数据。

缺点

  • 文档全部加载在内存中,消耗资源大。

2.3、JDOM解析

  Java DOM解析是Java特定文档模型,简化了与XML的交互并且比使用DOM实现更快。

优点

  • 使用具体类而不是接口,简化了DOM的API;
  • 大量使用了Java集合类;

缺点

  • 没有较好的灵活性;
  • 性能不是那么优异。

2.4、DOM4J解析

  是JDOM的分支,并且继承了XPath等,具有性能优异,功能强大,方便使用等特点,例如Hibernate中就使用了DOM4J。

DOM4J解析XML步骤:

//1. 引入jar文件 dom4j.jar 
//2. 创建一个指向XML文件的输入流 
FileInputStream fis = new FileInputStream("xml文件的地址"); 
//3. 创建一个XML读取工具对象 
SAXReader sr = new SAXReader(); 
//4. 使用读取工具对象, 读取XML文档的输入流 , 并得到文档对象 
Document doc = sr.read(fis); 
//5. 通过文档对象, 获取XML文档中的根元素对象 
Element root = doc.getRootElement();

DOM4J - XPath解析XML:

//1. 获取到XML资源的输入流 
URL url = new URL("xml数据地址"); 
URLConnection conn = url.openConnection(); 
InputStream is = conn.getInputStream(); 
//2. 创建一个XML读取对象 
SAXReader sr = new SAXReader(); 
//3. 通过读取对象 读取XML数据,并返回文档对象 
Document doc = sr.read(is); 
Node node = doc.selectSingleNode("节点名"); 
System.out.println(node.getText()); 
is.close();

3、Java代码生成XML

步骤:

//1. 通过文档帮助器, 创建空的文档对象 
Document doc = DocumentHelper.createDocument(); 
//2. 向文档对象中, 加入根节点对象 
Element books = doc.addElement("books"); 
//3. 向根节点中 丰富子节点 
for(int i=0;i<1000;i++) { 
    //向根节点中加入1000个book节点. 
    Element book = books.addElement("book"); 
    //向book节点, 加入id属性 
    book.addAttribute("id", 1+i+""); 
    //向book节点中加入name和info节点 
    Element name = book.addElement("name"); 
    Element info = book.addElement("info"); 
    name.setText("苹果"+i); info.setText("哈哈哈"+i); 
}
//4. 创建文件的输出流 
FileOutputStream fos = new FileOutputStream("c:\\books.xml"); 
//5. 将文件输出流 , 转换为XML文档输出流 
XMLWriter xw = new XMLWriter(fos); 
//6. 写出XML文档 xw.write(doc); 
//7. 释放资源 
xw.close(); 
System.out.println("代码执行完毕");

4、XStream

可以快速将Java对象转换为XML字符串

//1. 创建XStream 对象 
XStream x = new XStream(); 
//2.修改类生成的节点名称 (默认节点名称为 包名.类名) 
x.alias("节点名称",类名.class); 
//3. 传入对象 , 生成XML字符串 
String xml字符串 = x.toXML(对象);

5、JSON介绍

  随着互联网的不断发展,性能与效率是项目开发中比较看重的部分,XML虽然性能稳定,但是效率上可能会逊色一点,随着JSON字符串的产生,在解析大文件时效率极高,并且逐渐成为一种主流。

  JSON(JavaScript Object Notation),JavaScript对象简谱,是一种轻量级的数据交互格式。

存储形式:一个大括号表示一个对象

// 对象格式
{
    '属性':,
    '属性':}

// 数组格式
[元素1, 元素2...]

// 注意:二者可以嵌套使用

6、Java与JSON

  • 将Java对象,转换为JSON格式的字符串;
  • 将JSON格式的字符串,转换为Java对象。

目前常用的转换工具为Gson和FastJson

6.1、Gson

  Gson是Google推出的一个解析JSON字符串的工具库,功能强大,性能稳定。

Java对象转为JSON字符串:

//1. 引入JAR包 
//2. 在需要转换JSON字符串的位置编写如下代码即可: 
String json = new Gson().toJSON(要转换的对象);

JSON字符串转为Java对象:

//1. 引入JAR包 
//2. 在需要转换Java对象的位置, 编写如下代码: 
类型 对象 = new Gson().fromJson(JSON字符串,对象类型.class);

6.2、FastJson

  FastJson是阿里巴巴推出的解析JSON字符串的工具库,是国内常用的工具库。

Java对象转为JSON字符串:

//1. 引入JAR包 
//2. 在需要转换JSON字符串的位置编写如下代码即可: 
String json=JSON.toJSONString(要转换的对象);

JSON字符串转为Java对象:

//1. 引入JAR包 
//2. 在需要转换Java对象的位置, 编写如下代码: 
类型 对象名 = JSON.parseObject(JSON字符串, 类型.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<p><img src="https://img-bss.csdnimg.cn/202102030816377418.jpg" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030816443989.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030816516642.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030816585998.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817043875.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817118023.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817173163.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817246646.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817379025.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817436096.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817494650.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030817551889.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818029930.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818103441.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818171378.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818249148.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818316514.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818423760.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818481929.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030818559917.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030819025381.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030819105301.png" alt="" /></p> <p><img src="https://img-bss.csdnimg.cn/202102030819161712.png" alt="" /></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值