0
点赞
收藏
分享

微信扫一扫

XML与JSON

慎壹 2022-04-03 阅读 37
java

XML简介

XML是可扩展标记语言(exensible Markup Language)的缩写,它是是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。
例如下面的xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<book>
		<book id="01">
			<name>红楼梦</name>
			<info>怎么说</info>
		</book>
		<book id="02">
			<name>西游记</name>
			<info>孙悟空</info>
		</book>
</book>

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

XML有几个特点:
一是纯文本,默认使用UTF-8编码,二是可嵌套,适合表示结构化数据。
如果把XML内容存为文件,那么它就是一个XML文件,
例如book.xml。此外,XML内容经常通过网络作为消息传输。

XML的作用:
1.网络上数据传输
2.数据存储
3.配置文件

XML语法格式

1. XML文档声明

<?xml version="1.0" encoding="UTF-8"?>//版本和编码

2.语法:
开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称>
标记名称: 自定义名称

必须遵循以下命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写
例如 ,我们通过标记, 描述一个人名:

<name>猪八戒</name>
  1. 一个XML文档中, 必须有且且仅允许有一个根标记.
    正例:
 <names> 
 		<name>张三</name> 
 		<name>李四</name> 
 </names>

反例:

<name>李四</name> 
<name>麻子</name> 
  1. 标记可以嵌套, 但是不允许交叉.
    正例:
<person> 
		<name>李四</name> 
		<age>18</age>
 </person> 

反例:

<person> 
		<name>李四<age></name> 
		18</age>
		 </person>
  1. 注释注释不能写在文档文档声明前 注释不能嵌套注释
    格式:
    注释开始: `<!–

    注释结束: -->`

    XML解析

    DOM解析:
    DOM是Document Object Model的缩写,DOM模型就是把XML结构作为一个树形结构处理,从根节点开始,每个节点都可以包含任意个子节点。

    因为XML是一种树形结构的文档,它有两种标准的解析API:
    DOM:一次性读取XML,并在内存中表示为树形结构;
    SAX:以流的形式读取XML,使用事件回调。
    .
    Java提供了DOM API来解析XML,它使用下面的对象来表示XML的内容:
    Document:代表整个XML文档;
    Element:代表一个XML元素;
    Attribute:代表一个元素的某个属性。
    DocumentBuilder.parse()用于解析一个XML,它可以接收InputStream,File或者URL,如果解析无误,我们将获得一个Document对象,这个对象代表了整个XML文档的树形结构,需要遍历以便读取指定元素的值

Java提供的DOM API可以将XML解析为DOM结构,以Document对象表示;

优点:DOM可在内存中完整表示XML数据结构;

缺点:DOM解析速度慢,内存占用大。

SAX解析
这种解析相对于DOM解析内存小了
SAX是Simple API for XML的缩写,它是一种基于流的解析方式,边读取XML边解析,并以事件回调的方式让调用者获取数据。因为是一边读一边解析,所以无论XML有多大,占用的内存都很小。

SAX解析:

startDocument:开始读取XML文档;
startElement:读取到了一个元素,例如;
characters:读取到了字符;
endElement:读取到了一个结束的元素,例如;
endDocument:读取XML文档结束。

SAX是一种流式解析XML的API;

SAX通过事件触发,读取速度快,消耗内存少;

调用方必须通过回调方法获得解析过程中的数据。

JSON

简介:
JSON: JavaScript Object Notation JS 对象简谱 , 是一种轻量级的数据交换格式.
格式
{
“name”:“金苹果”,
“info”:“种苹果”
}
一个对象, 由一个大括号表示.
括号中 描述对象的属性 .
通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键
应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解 析.)
键值对的值, 可以是JS中的任意类型的数据

数组格式
案例 [元素1,元素2…]

 { 
 "name":"王二麻子", "age":18, 
 "pengyou":["张三","李四","王二","麻子",{ //看起来很不舒服
 			"name":"怎么说", 
 			"info":"我和你心连心" }], 
 "hello":{ 
 		"name":"你好", 
 		"body":"芜湖" 
 } 
 }

Java与JSON
1.将对象转换为JSON字符串
2.将JSON字符串转换为对象

Gson

将对象转换为JSON字符串

转换JSON字符串的步骤:

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

案例:

Book b = BookDao.find(); 
String json = new Gson().toJson(b); 
System.out.println(json);

将JSON字符串转换为对象

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

案例:

 String json = "{\"id\":1,\"name\":\"孙悟空\",\"author\":\"猪八戒 \",\"info\":\"西天取经\",\"price\":10}"; 
 Book book = new Gson().fromJson(json, Book.class); 
 System.out.println(book);

FastJson
将对象转换为JSON字符串
转换JSON字符串的步骤:

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

案例:

Book b = BookDao.find(); 
String json=JSON.toJSONString(b); 
System.out.println(json);

将JSON字符串转换为对象

  1. 引入JAR包
  2. 在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class); 
 List<类型> list=JSON.parseArray(JSON字符串,类型.class);

案例:

String json = "{\"id\":1,\"name\":\"孙悟空\",\"author\":\"猪八戒 \",\"info\":\"西天取经\",\"price\":10}"; 
Book book = JSON.parseObject(json, Book.class); 
System.out.println(book);

JSON作为数据传输的格式,有几个显著的优点:

JSON只允许使用UTF-8编码,不存在编码问题;
JSON只允许使用双引号作为key,特殊字符用\转义,格式简单;
浏览器内置JSON支持,如果把数据用JSON发送给浏览器,可以用JavaScript直接处理。

举报

相关推荐

0 条评论