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>
- 一个XML文档中, 必须有且且仅允许有一个根标记.
正例:
<names>
<name>张三</name>
<name>李四</name>
</names>
反例:
<name>李四</name>
<name>麻子</name>
- 标记可以嵌套, 但是不允许交叉.
正例:
<person>
<name>李四</name>
<age>18</age>
</person>
反例:
<person>
<name>李四<age></name>
18</age>
</person>
-
注释注释不能写在文档文档声明前 注释不能嵌套注释
格式:
注释开始: `<!–注释结束: -->`
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字符串的步骤:
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
案例:
Book b = BookDao.find();
String json = new Gson().toJson(b);
System.out.println(json);
将JSON字符串转换为对象
- 引入JAR包
- 在需要转换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字符串的步骤:
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
案例:
Book b = BookDao.find();
String json=JSON.toJSONString(b);
System.out.println(json);
将JSON字符串转换为对象
- 引入JAR包
- 在需要转换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直接处理。