XML和JSON
XML
XML(EXtensible Markup Language),可扩展标记语言.它是一种不同系统间数据交换的格式
XML的特点:
1.与操作系统、编程语言的开发平台无关
2.实现不同系统之间的数据交换
XML的作用:
1.数据交互
2.配置应用程序和网站
3.Ajax基石
XML文档结构
XML文件由两部分组成:
1.声明(写在第一行,内容为XML文件版本信息和编码格式)
2.文档元素描述信息(文档结构)
(1)根元素.一个XML文件只有一对唯一的根元素.
(2)子元素.在根元素之间,按层级缩进对齐
XML标签
XML文档内容由一系列标签元素组成
语法:
<元素名 属性名=“属性值”>元素内容</元素名>
当空元素时(无元素内容),可表示为:
<name> </name>
<name></name>
<name/>
1.属性值用双引号包裹
2.一个元素可以有多个属性
3.属性值中不能直接包含 < 、 " 、&
4.不建议使用的字符: ’ 、>
XML编写注意事项
1.所有XML元素都必须有结束标签
2.XML标签对大小写敏感
3.XML必须正确的嵌套
4.同级标签以缩进对齐
5.元素名称可以包含字母、数字或其他的字符
6.元素名称不能以数字或标点符号开始
7.元素名称中不能含空格
<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo>
<Brand name="华为">
<Type name="U8650"/>
<Type name="HW123"/>
<Type name="HW321"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone4"/>
</Brand>
</PhoneInfo>
XML命名空间
XML命名空间的作用:
1.用来规范属性
2.解决在复杂、大型XML文件中,出现名字相同但是含义不同的元素
XML解析器
解析器类型:
1.非验证解析器.检查文档格式是否良好(如网页报错提示)
2.验证解析器.使用DTD(Document Type Define)检查文档的有效性,dtd文件注明了顺序格式.
解析XML技术
1.DOM
基于XML文档树结构的解析,适用于多次访问的XML文档
特点:比较消耗资源
2.SAX
基于事件的解析,适用于大数据量的XML文档
特点:占用资源少,内存消耗小
3.DOM4J
对DOM进行了封装,是非常优秀的Java XML API,性能优异,功能强大,开放源代码
DOM解析XML
DOM(Document Object Model)文档对象模型,把XML文档映射成一个倒挂的树.
DOM常用的接口:
DOM解析包:org.w3c.dom包
public class Test {
public static void main(String[] args) {
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder =factory.newDocumentBuilder();
Document doc =builder.parse("收藏信息.xml");
showInfo(doc);
addBrand(doc);
saveXML("bb.xml", doc);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//显示手机品牌型号方法
public static void showInfo(Document doc) {
NodeList brandNode =doc.getElementsByTagName("Brand");
for(int i=0;i<brandNode.getLength();i++) {
Element brandEle = (Element)brandNode.item(i);
System.out.println("品牌:"+brandEle.getAttribute("name"));
NodeList typeNode =brandEle.getChildNodes();
for(int j=0;j<typeNode.getLength();j++) {
if(typeNode.item(j).getNodeType()==Node.ELEMENT_NODE) {
Element typeEle =(Element)typeNode.item(j);
System.out.println("型号:"+typeEle.getAttribute("name"));
}
}
}
}
//增加品牌信息方法
public static void addBrand(Document doc) {
Element ele=doc.createElement("Brand");
ele.setAttribute("name", "三星");
Element ele1=doc.createElement("Type");
ele1.setAttribute("name", "Note4");
ele.appendChild(ele1);
NodeList phoneinfo=doc.getElementsByTagName("PhoneInfo");
phoneinfo.item(0).appendChild(ele);
}
//保存XML文件方法
public static void saveXML(String path,Document doc) {
TransformerFactory factory =TransformerFactory.newInstance();
try {
Transformer former =factory.newTransformer();
former.setOutputProperty(OutputKeys.ENCODING, "GB2312");
former.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source =new DOMSource(doc);
StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream(path),"GB2312"));
former.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
JSON
JavaScript Object Notation
轻量级的文本数据交换格式,具有自我描述性,比XML传输速度快.
JSON最初用来表示JavaScript中的对象,但目前已独立于JavaScript成为最为常用的数据格式之一.
JSON语法格式
JSON中有两种数据结构:对象和数组
(1)对象
大括号内为对象,对象中的数据由名称/值对构成(key/value)
值的类型可为字符串、数字、布尔值、null、数组、对象
数据之间由逗号隔开
(2)数组
中括号内为数组
数组中的数据类型同对象中值的类型,即可为字符串、数字、布尔值、null、数组、对象
对象和数组可混合使用:
{
"name":"jason",
"age":20,
"skills":["java","Hadoop","Python"]
}
FastJson
是由阿里巴巴开源的JSON解析框架
下载地址:http://central.maven.org/maven2/com/aliaba/fastjson/1.2.47/fastjson-1.2.47.jar
主要是用来将Java对象序列化成JSON字符串,或是将JSON字符串反序列化为Java对象,使用前需要先导入JSON的jar包。
(1)对象—>JSON字符串
通过JSON.toJSONString(对象)方法来完成
String stuJSON= JSON.toJSONString(student)
(2)JSON字符串–>对象
通过 JSON.parseObject(String json, User.class)方法来完成
String json = "{\"age\":18,\"birthDate\":1622448323468,\"dog\":{\"name\":\"小花\"},\"dogs\":[{\"name\":\"小1\"}, {\"name\":\"小2\"},{\"name\":\"小3\"}],\"userName\":\"张三\"}";
User user1 =JSON.parseObject(json, User.class);