XML和JSON学习笔记

XML

xml是一种可扩展标记语言。
xml特点:
(1)具有平台无关性,是一门独立的标记语言。
(2)具有自我描述性。
xml作用:
可以用于网络数据传输、数据存储和配置文件。目前最普遍的作用就是配置文件,至于数据传输方面普遍被json格式替代了,因为json的速度更快。

xml语法

1、文档开头
<?xml version= "1.0" encoding="UTF-8"?>

表明了该xml文档的版本和编码格式,需要放在xml文档的开头。

2、标记

语法:<开始标记> </结束标记>
注意:标记名称不能以xml开始,不能出现空格和冒号,不能以数字或标点符号开始;标记名称区分大小写;标记名称可以含字母、数字和其它符号。
(1)xml文档中,有且仅有一个根标记,(即最外层有一个标记将内层所有标记包含在内)
(2)标记可以嵌套,但不能交叉,即开始标记和结束标记必然是成对出现的,不在在一对标记中间出现单个标记
(3)同层标记互为兄弟标记,外层标记为祖先或父标记,内层标记为后代或子标记。
(4)开始标记中可以有n个属性,属性名不可以重复,每个属性是一对键值对,属性间用空格分开,属性值必须用引号引用。
(5)注释不能写在声明文档前,不能嵌套使用,
(6)举例:

<?xml version="1.0" encoding="UTF-8"?>
<person>
	<name>张三</name>
	<age>21</age>
</person>

xml解析方式

1、SAX解析

	逐行读取文件进行解析,立即开始,解析到标签的开始/结束/内容/属性时,触发时间,编程时可以获取触发的事件进行相应的处理。
优点:(1)立即开始,无需等待;
	(2)逐行加载,无需等待整个内存读取完毕;
	(3)满足指定条件即可停止,某些时候无需加载整个文档。
缺点:(1)单向解析,无法定位文档层次,且不能同时访问同一文档中的不同部分数据;
	  (2)无法得知事件发生时元素的层次,只能维护结点的父子关系;
	  (3)只读解析方法,无法修改。

2、DOM解析

优点:(1)加载整个文档到内存,建立文档树模型,可以对数据和结构进行修改。
      (2)双向解析。
缺点:文档全部加载需要耗费资源。(由于xml一般作为配置文件,占用内存小,所以缺点可以忽略不计)。

3、JDOM解析

	基于DOM解析研发的第一个Java特定文档模型,简化了与xml的交互,并且更快的实现。
优点:(1)使用了具体的类而不是接口,简化了DOM的API。
      (2)大量使用了Java集合类,方便了Java开发人员。
缺点:(1)灵活性一般。
 	  (2)性能一般。

4、DOM4J解析

	JDOM的一个只能分支,包括集成的XPATH支持,实现更快,操作更简单。

DOM4J-XPATH解析实例

路径表达式:
1、/ :从根节点查
2、// :从发起结点位置开始查找后代结点
3、. :查看当前结点
4、.. :查看父节点
5、@ :选择特定的属性->[@属性名=‘值’]

解析xml语法:

例: public static void main(String[] args) throws IOException, DocumentException {
        //获取文件输入流
        FileInputStream fis = new FileInputStream("f:\\Demo1.xml");
        //创建xml读取对象
        SAXReader sr = new SAXReader();
        //读取并获得文档对象
        Document doc = sr.read(fis);
        //通过文档对象+xpath,查找所有的name对象
        List<Node> list = doc.selectNodes("//book[@id='1001']//name");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getName() + ":" + list.get(i).getText());
        }
    }

由于上述代码只查找了id=1001的书名,因此可以改为selectSingleNode方法,该方法进行查询时,若有多个满足条件,会优先选择第一个。

生成xml格式:

例:public static void main(String[] args) throws IOException {
        //1.    通过文档帮助器,创建一个文档对象
        Document doc = DocumentHelper.createDocument();
        //2.    给文档添加第一个结点(根节点)
        Element root = doc.addElement("books");
        //3.    根据根节点,丰富子节点
        for (int i = 0; i < 100; i++) {
            Element book = root.addElement("book");
            Element name = book.addElement("name");
            Element info = book.addElement("info");
            name.setText(i + "种苹果");
            info.setText(i + "个种苹果的小女孩");
            book.addAttribute("id",100 + "" + i );
        }
        //4.    创建一个文件输出流
        FileOutputStream fos = new FileOutputStream("books.xml");
        //5.    将输出流转换为xml输出流
        XMLWriter xw = new XMLWriter(fos);
        //6.    写出文档
        xw.write(doc);
        //7.    释放资源
        xw.close();
        System.out.println("执行完毕!");
    }

XStream生成xml格式:

例:public static void main(String[] args) {
        Person p = new Person();
        p.setName("张三");
        p.setAge(20);
        //XStream使用
        //1.    创建XStream对象
        XStream x = new XStream();
        //2.    修改某个类型生成的结点(可选,默认情况是显示包名.类名)
        x.alias("person",Person.class);
        //3.    传入对象,开始生成
        String xml = x.toXML(p);
        System.out.println(xml); //输出xml格式的字符串
    }

JSON

json:JavaScript Object Notation,JS对象简谱,一种轻量级的数据交换格式。

json语法

json语法格式:一个对象由一个大括号表示。括号中通过键值队描述对象的属性。键与值之间使用冒号连续,多个键值对之间使用逗号分隔。键值对的键应使用引号引注(通常Java解析时,键不适用引号会报错,而JS能正常解析)。键值对的值,可以是JS中的任意类型的数据(字符串、字符、数组格式)。

json解析方式

由于目前java没有内置json解析的jar包,需要使用Gson或FastJson的jar包。
1、Gson方法:
(1)创建Gson对象
(2)使用toJson方法将类的属性转换成json格式的字符串,如 例1所示。注意:数组类型的将会转换成ArrayList类型的。
(3)将json格式字符串转回对象,如例2所示。

1public static void main(String[] args){
	//1、创建Gson对象
	Gson g= new Gson();
	Person p = new Person("1001","张三",21);
	String s = g.toJson(p);
	//3、打印输出
	System.out.println(s);	
}2public static void main(String[] args){
	//1、创建Gson对象
	Gson g= new Gson();
	//2、转换json字符串
	Person p = g.fromJson("{\"id\":\"1001\",\"name\":\"张三\",\"age\":21}",Person.class);
	System.out.println(p.getId());
}

2、FastJson方法


```java
例1:转json
public static void main(String[] args){
	//1.创建要转换的对象
		Person p = new Person("1001","张三",21);
		//2.使用toJSONString()静态方法进行转换json
	String json = JSON.toJSONString(p);
	//3、打印输出
	System.out.println(json);	
}2:转换json格式为对象
public static void main(String[] args){
	//1.将json转换成对象
	Person p =JSON.parseObject("{\"id\":\"1001\",\"name\":\"张三\",\"age\":21}",Person.class);
	//2、打印输出
	System.out.println(p.getId());	
}3:转换json格式为数组
		public static void main(String[] args){
		List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]",String.class);
		System.out.println(strings.get(1));//输出集合中下标为1的值
	}

本次整理了XML和JSON的一些基础语法和用法,还有一些简单的例子,由于是我本人的学习笔记,难免有不规范、不正确的地方,如果访客发现请指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值