XML与JSON

XML与JSON

XML和JSON是目前最常用的两种数据交换格式。数据交换格式,就是服务器端与客户端之间进行数据传输与交换的格式。

1. XML语法

XML(extensiable Markup Language)是可扩展标记语言,它独立于任何平台、独立于任何编程语言;因此能够跨平台交换数据,使用不同编程语言编写的代码也都能解析XML格式的数据。

(1)XML文档声明

在.xml文件的开头,指明版本和编码方式

<?xml version="1.0" encoding="utf-8"?> 

(2)标签

标签,也称为元素、节点; XML文档是由一个个标签组成的; 标签的开始用<>,结尾用</>

 <标签名>内容 </标签名>
 <name>金苹果</name>

每个标签都有一个标签名,可以重名;
标签的命名规则:使用字母、数字和字符,不能以数字和标点符号开头,区分大小写

(3)有且仅有一个根标签

标签内部可以嵌套多个标签,但xml文件中的所有标签要全部嵌套在一对标签内,也就是根标签

<books>
	<book>
		<name>金苹果</name>
		<info>种苹果的方法</info>
	</book>
</books>

name是book的子标签,book是books的子标签
books是book的父标签,是name的祖先标签

(4)标签的属性

标签除了有开头、结尾,还有属性
在标签的开始位置定义并指定属性值

 <标签名 属性="属性值">内容</标签名>
 <name id="1001" version="1.2">金苹果</name>

可以有多个属性,用空格间隔

(5)注释

xml文件的注释:

<!-- 注释内容 -->

例子:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	注释:<?xml ?>是文件的声明,一定要放在文件的最最最开头,?是前后的标志,xml表示该文件是一个xml文件
--><books>
	<book id="1000">
		<name>金苹果</name>
		<price>18</price>
	</book>
	<!--
		第一本书,标记名称是book,属性是id 属性值为1000,book的内部还包含了两个标记
		分别是书名name和价格price
	-->
	<book id="1001">
		<name>银苹果</name>
		<price>17</price>
	</book>
	<book id="1002">
		<name>铜苹果</name>
		<price>16</price>
	</book>
</books>

2. XML解析

Java中XML解析方法有四种,分别是SAX解析、DOM解析、JDOM解析、DOM4J解析;
(1)SAX解析是逐行解析,每次读取xml文件的一行,解析完之后释放改行资源再读下一行,
使用的是事件驱动机制,每读取到一个标签的开头、结尾、属性时触发事件;
	优点:节省内存、不必解析整个文档(满足某个条件时可以提前终止解析)
	缺点:只能读取文件,不能修改、添加、删除;无法得知层次关系;无法定位文档层次
(2)DOM解析首先将整个文档加载到内存,并建立文档树,可以通过操作文档树,对数据进行添加、修改和删除
	优点:允许对数据和结构进行修改;
	缺点:内存消耗大
(3)JDOM是第一个JAVA特定模型,简化了DOM的API,方便java开发人员
(4)DOM4J是JDOM的分支,集成了XPath等,功能更强,效率更高。以下内容都是基于DOM4J的XML解析

(1) Document

Document文档对象,对应的是整个xml文件,主要操作:

	Element root = doc.getRootElement()获取根节点

	Element root = doc.addElement(String) 添加根节点

(2) Element

Element 节点对象(元素),对应的是xml文件中的一个标签,主要操作:

	String str =element.getName() 获取标签名

	String  str = element.getText() 获取标签内容

	List<Element> list = element.elements()获取全部子节点

	Element e = element.element(String str) 获取第一个名称为str的子节点

	String str = element.attributeValue(String 属性名) 获取对应的属性值

	String str = element.elementText(String 子节点名称) 获取对应子节点的内容

	element.setText("内容")指定标签的内容为……

	element.addElement("标签名"); 添加子节点,指定名字

	element.addAttribute("属性名","属性值") 添加属性,直接设置属性值

(3) SAXReader

SAXReader类用于读取XML文件(Stream API for XML Reader) 将xml文档按照字节流的形式读取

	SAXReder reader = new SAXReader();

	Document doc = reader.read(new FileInputStream("demo.xml"));  //指向xml文件的输入流fis,SAXReader从流中读取,并返回一个Document对象
	
	Element root = doc.getRootElement();

(4) XPath

XPath类似于linux系统中的文件路径 ,用来更加方便的寻找标签

	/根标签  //普通标签  .当前  ..上一级  @属性

	List<Element> list = doc.selectNodes("//name")找到当前节点下面的所有name节点

	Element e = doc.selectSingleNode("//book[@id='1001']//name")找到一个唯一的节点,该节点位于属性值为1001的book节点下,节点的名称为name

3. JSON语法

一个大括号代表一个对象,内部是一个个“键值对”(属性和属性值,都用双引号引起来,键值之间用冒号连接),用逗号间隔,对象里面可以嵌套对象,键值对的值可以是一个字符串,也可以是数组[“”,“”,“”],还可以是对象,还可以是对象数组

{

	"name":"金苹果",

	"info":"种植苹果的方法",

	"page":["page1","page2","page3"]

}

4. JSON解析

将Java中的对象 快速的转换为 JSON格式的字符串.
将JSON格式的字符串, 转换为Java的对象.

(1)Gson

	导入jar包,创建Gson对象

	Gson gson = new Gson();

	gson.toJson(Object)  从对象转换成JSON字符串

	gson.fromJson(String,Class) 从JSON字符串还原对象

	如果类存在,可以传入xx.class,返回对应类型的对象;如果类不存在,可以传入HashMap.class将返回一个map

(2)FastJson

	导入jar包,调用JSON类的静态方法

	JSON.toJsonString(Object) 从对象到字符串

	JSON.parseObject(String,Class) 从字符串还原为对象

	JSON.parseArray(String,Class) 从字符串还原为数组
	
	不管Gson还是FastJson都会自动把数组转成List
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值