1.XML
这是一个xml的格式的示例:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1001">
<name>book1</name>
<info>这是第1本书的简介!</info>
</book>
<book id="1002">
<name>book2</name>
<info>这是第2本书的简介!</info>
</book>
</books>
XML可以用于:
-
网络数据传输 ❌(现在基本上都是使用JSON)
JSON解析性能比XML更高,而且数据量越大差距越明显,但XML可读性更强。XML重点用于编写配置文件。
-
数据存储❌(基本不用)
-
配置文件(XML主要用于配置文件)
XML重点在于 掌握语法格式,解析XML了解即可。
解析XML的方式:
- SAX解析,不必将文档全部加载到内存中,占用内存非常小,单向解析,需要程序员维护节点的父子关系。
- Dom解析:将整个文档加载到内存中,建立树模型,消耗资源大(缺点可忽略不计),方便操作数据和结构,通常都是使用dom解析。
下面是两个解析xml的示例:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* dom4j dom解析网络xml示例
* 此api用来解析查询手机号码归属地
* api:
* http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253"
* */
public class XmlTest {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "18159895016";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
//打开此url,获取连接
URLConnection urlConnection = url.openConnection();
//获取连接的输入流
InputStream is = urlConnection.getInputStream();
SAXReader saxReader = new SAXReader();
//将输入流转成doc
Document doc = saxReader.read(is);
//获取根节点
Element root = doc.getRootElement();
String resultcode = root.elementText("resultcode");
if ("200".equals(resultcode)){
Element result = root.element("result");
String province = result.elementText("province");
String city = result.elementText("city");
String company = result.elementText("company");
if (city.equals(province)){
System.out.println("手机号码归属地是:"+city);
}else {
System.out.println("手机号码归属地是:"+province+" "+city);
}
System.out.println("手机号运营商是:"+company);
}else {
System.out.println("手机号有误!解析错误!");
}
}
}
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* dom4j XPATH解析网络xml
* XPATH非常方便,尤其是当xml很大时
*
* 此api用来解析查询手机号码归属地
* api:
* http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253"
* */
public class XpathTest {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "18159895016";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(is);
//获取单节点company,作为演示这里只获取了运营商,其余信息没有获取
Node node = doc.selectSingleNode("//company");
System.out.println(node.getName()+":"+node.getText());
}
}
此外还有Jdom和dom4j都是基于dom方式。
其中jdom方便java开发,性能不是很高,而且不够灵活(因为是面向类编写的)
dom4j用有更高的性能和更高的灵活性(因为是面向接口编写的),此外还可以通过XPATH的方式解析。
Dom4j是一个非常优秀的开源的java xml api,性能优异,功能强大,易于使用。
许多开源项目都使用Dom4j来读写xml,如Hibernate
2.JSON
JSON是一种轻量级数据交换格式。
JSON(JavaScript Object Notation,JS对象简谱)是一种独立于语言的数据存储格式,是欧洲提出来的JavaScript中的一种规范。
在解析上:解析json速度比解析xml快,
在存储数据上:json表示的数据占用空间更小,更利于传输。
json出现于1999,得益于以上一些优点,在2005左右逐渐取代xml的地位。
存储对象格式对比:
Json使用频率非常之高,后端开发经常使用Json。
Java没有内置的解析Json的类,解析Json最常用的是:
- Gson:谷歌的
- FastJson:阿里的
//Gson和fastJson的使用,如果json中的属性是数组类型,会被解析成List类型
public class JsonTest {
public static void main(String[] args) {
Person p = new Person("张三",20,"北京市大兴区");
/* Gson g = new Gson();
//将对象转成json
String s = g.toJson(p);
System.out.println("将对象转换成json是:");
System.out.println(s);
//将json转成对象
Person p2 = g.fromJson(s, Person.class);
System.out.println("将json转成对象是:");
System.out.println(p2);*/
//阿里的fastjson
String s = JSON.toJSONString(p);
System.out.println(s);
Person p2 = JSON.parseObject(s,Person.class);
System.out.println(p2);
}
}